JQuery使用ajax +语义ui的三个关键事件

问题描述 投票:2回答:1

希望有人可以帮助我:我正在开发一个时间记录Web服务。一个关键事件应启动/停止新的/正在运行的计时器。另一个用于删除记录并关闭语义ui模式。问题是如果没有多次触发ajax调用,我必须取消绑定启动/停止bcs的关键事件。因为这种不合约我不能让两个(或三个)事件各自工作一次以上。我无法找出另一种选择......我在jquery中相对较新,我尝试过使用unbind()和one()

为了更好的例子,我的代码片段(首先是开始/停止键事件)之后是带有删除事件的语义模式。

//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();
    }

});
jquery semantic-ui
1个回答
0
投票

多次触发的事件侦听器通常在绑定多次执行时发生。例如,如果您使用ajax来获取另一个也使用类似绑定命令的页面,则会发生这种情况。结果,这些事件侦听器堆栈导致多次执行。

在这种情况下,不要试图通过每次调用它时解除绑定来解决这个问题,而是首先通过调整bind命令的位置来避免这个问题,这样它只执行一次(如果有办法这样做的话) )。

© www.soinside.com 2019 - 2024. All rights reserved.