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

标签 javascript function parameter-passing

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

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');});
});

它第一次工作 find.... 触发一次... 当我再次单击 .rsvp 类,然后单击是或否按钮时,它会触发两次。

然后三次

然后四次。

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

感谢任何帮助。

最佳答案

每次调用 dialog 方法时都会绑定(bind)单击事件。由于 jQuery 允许将多个相同类型的事件附加到一个元素。

解决此问题的一种方法是在调用 dialog 方法时绑定(bind)和取消绑定(bind)事件。这更像是一种 hacky 方法,因为不断的绑定(bind)和解除绑定(bind)被认为是一种反模式。

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

关于Javascript 模态窗口例程每次点击都会执行更多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35712354/

相关文章:

c - 为什么链接器不抛出多个函数声明错误?

ruby-on-rails - Rails : can't pass variable to partial, 我做错了什么?

python - 将参数传递给 Zope 浏览器页面

javascript - 在 Ubuntu 11.10 上编译 Node 0.4.7?

javascript - 我可以使用 Javascript 将两个函数合二为一吗?

javascript - 使用 JavaScript 从对象数组中提取高效的名称值对

mysql - PL-SQL - 我可以将枚举作为函数参数传递吗?

javascript - javascript中通过window.open()判断窗口是否关闭

sql - 在 SQL Server 中分别从给定的月、日和年获取星期几名称

jQuery - 通过提交按钮操作值