没有选择器的jQuery .off无效

时间:2016-04-12 20:03:37

标签: jquery

我有一些代码将事件处理程序连接到bootstrap模式。此代码被调用两次,因此在调用.off()之前调用.on()以确保事件处理程序不执行两次:

$("#learnMoreModal")
        .off("show.bs.modal", learnMoreModalShow)
        .on("show.bs.modal", learnMoreModalShow)
        .off("hidden.bs.modal", learnMoreModalHidden)
        .on("hidden.bs.modal", learnMoreModalHidden);

但是learnMoreModalShowlearnMoreModalHidden正在执行两次。为什么我的号召.off()没有删除它?

2 个答案:

答案 0 :(得分:1)

也许你应该看看使用

  

.unbind()

jquery中的功能。当我需要重新定义点击事件以便它们不执行多个功能时,我会使用它。

http://api.jquery.com/unbind/

答案 1 :(得分:0)

好吧,正如我害怕的那样,这是愚蠢的。虽然在某些情况下可以调用连接我的事件的函数两次,但实际上并不是这种情况。我进入jQuery源代码,发现jQuery在第一次调用learnMoreModalShow期间为.on()分配了一个94的ID,然后在下一次调用.off()时,其ID未定义。这导致我发现有人在我的整个.js文件中添加了第二个引用,所以整个事情都运行了两次......而不仅仅是连接事件的函数。

所以答案是:.off()正如上面所写的那样正常工作。如果处理程序仍在执行,您可能要么使用多个处理函数实例,要么在.off完成后在其他位置添加处理程序。