我有一些代码将事件处理程序连接到bootstrap模式。此代码被调用两次,因此在调用.off()
之前调用.on()
以确保事件处理程序不执行两次:
$("#learnMoreModal")
.off("show.bs.modal", learnMoreModalShow)
.on("show.bs.modal", learnMoreModalShow)
.off("hidden.bs.modal", learnMoreModalHidden)
.on("hidden.bs.modal", learnMoreModalHidden);
但是learnMoreModalShow
和learnMoreModalHidden
正在执行两次。为什么我的号召.off()
没有删除它?
答案 0 :(得分:1)
答案 1 :(得分:0)
好吧,正如我害怕的那样,这是愚蠢的。虽然在某些情况下可以调用连接我的事件的函数两次,但实际上并不是这种情况。我进入jQuery源代码,发现jQuery在第一次调用learnMoreModalShow
期间为.on()
分配了一个94的ID,然后在下一次调用.off()
时,其ID未定义。这导致我发现有人在我的整个.js文件中添加了第二个引用,所以整个事情都运行了两次......而不仅仅是连接事件的函数。
所以答案是:.off()
正如上面所写的那样正常工作。如果处理程序仍在执行,您可能要么使用多个处理函数实例,要么在.off
完成后在其他位置添加处理程序。