javascript - jQuery off() 不删除点击处理程序

标签 javascript jquery

我有以下代码:

$(document).ready(function () {
  EnableModal();
});

function EnableModal() {
  if (isModalEnabled) { return; }

  // Initialize modal dialog
  // attach modal-container bootstrap attributes to links with .modal-link class.
  // when a link is clicked with these attributes, bootstrap will display the href content in a modal dialog.
  $('body').on('click', '.modal-link', function (e) {
    e.preventDefault();
    $(this).attr('data-target', '#modal-container');
    $(this).attr('data-toggle', 'modal');
  });

}

function DisableModal() {
  $('body').off('click', '.modal-link');
}

我试图在某些情况下关闭此功能,因此我调用:

$('body').off('click', '.modal-link');

但是,具有 modal-link 类的按钮仍然允许点击事件通过。我在开发者控制台中没有看到任何错误。

我已经验证它正确地调用了这些,并且每个在我的测试用例中只被调用一次。

我在这里做错了什么?

最佳答案

我以前也遇到过这个问题。我不确定一开始发生了什么,想知道是否是因为选择器实际上并不相同。我检查了它们,发现它们是相同的,但仍然无法删除事件处理程序。

在删除原始函数后,我最终通过提供一个虚拟函数作为事件处理程序解决了这个问题。

function DisableModal() {
$('body').off('click', '.modal-link');
$('body').on('click', '.modal-link', () => {});
}

如果您不喜欢 lambda 表达式,请随意使用 ES5 版本。作为

$('body').on('click', '.modal-link', function(){});

关于javascript - jQuery off() 不删除点击处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33484369/

相关文章:

javascript - 当页面加载图像时,它只加载一次,还是每次在标记中找到它时?

javascript - 这是 firefox 或 jquery 中的错误还是我做错了什么?

javascript - 如何使用动态插入的 html 元素的 javascript/Jquery 函数调用维护新 id

javascript - 将大型 JSON 文件与 d3.js 一起使用会导致大量性能下降/崩溃

javascript - 如何在 jQuery UI 自动完成中手动聚焦/突出显示项目?

javascript - 如何淡出/淡入 slider 中的内容

javascript - 如何自动校正此灯箱中的图像尺寸?

javascript - 如何使用 javascript 在图像中使用指定的链接组创建随机链接?

javascript - 如何设置邮件发送时间间隔-js

jquery - 如何在jquery中附加外部div