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(); // Инициализация контроллера  
    });

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

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 05:01
999999 руб./за проект
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект