san_jorich
@san_jorich
Творческий кодер

При ajax-перезагрузке функция c contextmenu перестает корректно работать?

При первоначальной загрузке страницы функция работает корректно. Но стоит обновить слои с классом .day ( при перелистывании месяцев), как функция перестает выдавать contextmenu. Что не так делаю?
Код

function es_contextMenu(){
    var contextMenu = document.querySelectorAll('.day'); 
    var contextMenuOpen = document.querySelector('.context-menu-open');
    
    for (let i = 0; i < contextMenu.length; i++){
        contextMenu[i].addEventListener('contextmenu', function(e) {
            e.preventDefault();
            contextMenuOpen.style.left = e.clientX + 'px';
            contextMenuOpen.style.top = e.clientY + 'px';
            contextMenuOpen.style.display = 'block';
        });      
    }   

    document.addEventListener('click', function() { contextMenuOpen.style.display = 'none'; });

    jQuery(document).find('.make_status').each(function(){
        jQuery(this).on("click", function(){ current_markerStatus = jQuery(this).attr("status"); });        
    })      
}


И функции вызова
jQuery(document).ready(function() {

    es_get_workingSheduler_data(); // Подгрузка данных
    es_sheduleController(); // Инициализация контроллера  
    es_contextMenu(); // Контекстное меню  первоначальный вызов
    
    jQuery("#sub_month").on("click", function(){ // месяц назад      
        var date = jQuery("#currentMonth").attr("current_calendar_pos");        
        var new_date = moment(date).subtract(1, 'month').format('YYYY-MM-DD');

        jQuery("#currentMonth").attr("current_calendar_pos", new_date );        
        var new_date_label = moment(new_date).locale('ru').format('MMMM Y');        
        jQuery("#currentMonth").html("<h4>"+new_date_label.charAt(0).toUpperCase() + new_date_label.substr(1)+"</h4>");
        
        es_get_workingSheduler_grid(moment(new_date).format('MM-YYYY'));
        es_get_workingSheduler_data(moment(new_date).format('MM-YYYY'));
        es_contextMenu(); // Контекстное меню  
        es_sheduleController(); // Инициализация контроллера  
        
    });

    jQuery("#add_month").on("click", function(){ // месяц вперед       
        var date = jQuery("#currentMonth").attr("current_calendar_pos");
        var new_date = moment(date).add(1, 'month').format('YYYY-MM-DD');

        jQuery("#currentMonth").attr("current_calendar_pos", new_date );         
        var new_date_label= moment(new_date).locale('ru').format('MMMM Y');
        jQuery("#currentMonth").html("<h4>"+new_date_label.charAt(0).toUpperCase() + new_date_label.substr(1)+"</h4>");

       
       es_get_workingSheduler_grid(moment(new_date).format('MM-YYYY'));       
       es_get_workingSheduler_data(moment(new_date).format('MM-YYYY'));
       es_contextMenu(); // Контекстное меню  
       es_sheduleController(); // Инициализация контроллера  
    });

  • Вопрос задан
  • 38 просмотров
Пригласить эксперта
Ответы на вопрос 1
@alekcena
Нелинейный наставник
Если под словом "обновить" вы подразумеваете замену элементов на новые. - то логично что ничего не будет работать(на новых элементах нет событий), их нужно заново добавлять
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы