希望有人可以帮助我:我正在开发一个时间记录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();
}
});
多次触发的事件侦听器通常在绑定多次执行时发生。例如,如果您使用ajax来获取另一个也使用类似绑定命令的页面,则会发生这种情况。结果,这些事件侦听器堆栈导致多次执行。
在这种情况下,不要试图通过每次调用它时解除绑定来解决这个问题,而是首先通过调整bind命令的位置来避免这个问题,这样它只执行一次(如果有办法这样做的话) )。