Javascript 模态窗口例程每次单击都会执行更多时间

Javascript modal window routine executes more time with each click

本文关键字:执行 时间 单击 窗口 模态 例程 Javascript      更新时间:2023-09-26

所以我有一个模态对话框窗口,您可以将函数传递到其中。

function dialog(message, yesCallback, noCallback) {
    $('#modal_dialog div.title').html(message);
    var dialog = $('#modal_dialog');
    dialog.show();
    $('#btnYes').click(function() {
        yesCallback();
        setTimeout(function(){dialog.hide();},3000);
    });
    $('#btnNo').click(function() {
        noCallback();
        setTimeout(function(){dialog.hide();},3000);
    });
}

当我使用以下方法将函数传入它时:

$(document).on('tap','.rsvp',function(event){
  console.log('rsvp');
  value = $(this).parent().find('.storyid').text();
  dialog($(this).parent().find('H4').text(),function(){doingComing(value,'yes');},function(){doingComing(value,'no');});
});

它第一次找到就有效。开火一次...当我再次单击 .rsvp 类,然后单击"是"或"否"按钮时,它会触发两次。

然后三次

然后四次。

我不确定为什么会发生这种情况。

任何帮助表示赞赏。

每次调用 dialog 方法时都会绑定 click 事件。因为jQuery允许将多个相同类型的事件附加到一个元素。

解决此问题

的一种方法是在调用 dialog 方法时绑定和取消绑定事件。这更像是一种黑客方法,因为持续绑定和取消绑定被认为是一种反模式。

第二种方法是将点击事件移动到 dialog 方法之外,并找到一种区分回调的方法。