jquery停止委托事件被调用两次

时间:2015-12-31 06:24:03

标签: javascript jquery

我的JS看起来像这样

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

我有基于ajax的菜单,menuClickHandler用于使其工作并驻留在单独的JS文件中。 menuClickHandler关联与菜单项关联的其他函数。在单击菜单项时,它调用与菜单项关联的功能。假设我有菜单项Jump和与之关联的函数JumpHandler。在JumpHandler内,有一个简单的函数如下

functionA() {
    $("div.tree").on("click", ".branch", function(event) {
        event.stopPropagation();
        //some code
    });
}

方案: 当第一次加载页面时,一切都很好,当我点击Jump functionA' gets called and everything works fine. Now if click some other menu item and then click on再次调用Jump again, JumpHandler is called again and hence functionA`时,会导致分支上的点击事件被绑定两次。任何人都可以告诉我如何删除/取消删除委派的点击事件,以便只有点击事件绑定到分支。

jQuery版本:v2.1.1

3 个答案:

答案 0 :(得分:2)

您可以使用.one()代替.on()

  

将处理程序附加到元素的事件。每个事件类型的每个元素最多执行一次处理程序。

代码

extension UIView {
    var isViewEmpty : Bool {
        return  self.subviews.count == 0 ;
    }
}

答案 1 :(得分:1)

如果由于某种原因您必须在functionA内绑定点击事件,那么您可以尝试off

functionA() {
    $("div.tree").off("click", ".branch" );
    $("div.tree").on("click", ".branch", function(event) {
        event.stopPropagation();
        //some code
    });
}

或者您可以在functionA之外执行此绑定,因为它会将事件处理程序附加到将来的分支元素,无论您何时调用functionA

如果你想确保只触发一次事件,那么

functionA() {
    $("div.tree").on("click", ".branch", function(event) {
        event.stopPropagation();
        //some code
       $("div.tree").off("click", ".branch" );
    });
}

答案 2 :(得分:0)

因为一旦调用了函数,你就在jquery中初始化了一个函数,该函数将在不再调用函数的情况下执行。所以在调用任何函数之前只需关闭jquery函数

示例:

$("div.tree").off("click", ".branch" );
functionA();

$("div.tree").off("click", ".branch" );
functionB();