JQuery три ключевых события с ajax + семантический интерфейс - PullRequest
0 голосов
/ 18 сентября 2018

надеюсь, что кто-то может помочь мне здесь: я занимаюсь разработкой веб-службы регистрации времени.Одно ключевое событие должно запустить / остановить новый / запущенный таймер.Другой - для удаления записи и закрытия модального семантического интерфейса.Проблема в том, что мне нужно отменить привязку ключевых событий для запуска / остановки bcs, если не вызов ajax запускается несколько раз.Из-за этого я не могу заставить два (или три) события работать более одного раза каждый.Я не могу понять другой вариант ... Я относительно новичок в jquery, я пробовал это с unbind () и one ()

Для лучшего примера здесь мои фрагменты кода (сначала событие клавиши start / stop)) после этого семантический модал с удалением события.

//start new record by key(start numpad +, stop numpad - )

$(document).unbind('keydown', function(e){
    if($('button#saveButton').is(':hidden')){
        if (e.keyCode == 107) { // Numpad +
            var oRow = $('#buttonStartNew').parents('.recordRow');
            startRecord(oRow);
            return false;
        }else if(e.keyCode == 109){ // Numpad -
            var oRow = $('button.red').parents('tbody.recordRow');
            startRecord(oRow);
            return false;
        }
    }
});

//delete time record + popup

$('.removeButton').click(function(){
    var sRecordID = $(this).parents('.recordRow').find('.recordID').val();
    var clickedElement = $(this);

    if($('#modalAcceptButton').not(':hidden')){
        $(document).unbind('keydown', function(e){
            if(e.keyCode == 13) { // Enter
                deleteRecord(sRecordID, clickedElement)
                $('#myModal').modal('hide')
            }
        });
    }

    if($('button#saveButton').is(':hidden')){
        $('#myModal').modal({
            onDeny: function(){
                $(this).modal('hide');
            },
            onApprove: function(){
                deleteRecord(sRecordID, clickedElement);
            }
        }).modal('show')
    }else{
        clickedElement.parents('.recordRow').remove();
    }

});

1 Ответ

0 голосов
/ 19 сентября 2018

прослушиватели событий, которые запускаются несколько раз, обычно происходят, когда привязка выполняется более одного раза.Это может произойти, если, например, вы используете ajax для извлечения другой страницы, которая также использует аналогичную команду связывания.В результате эти приемники событий стекаются, что приводит к нескольким выполнениям.

В этом случае вместо того, чтобы пытаться исправить это, связывая его каждый раз, когда вы вызываете его, попытайтесь избежать этой проблемы в первую очередь, настроивположение вашей команды связывания, поэтому она выполняется только один раз (если есть способ сделать это).

...