2011-02-02 59 views
4

是否有可能删除比回加点击事件到特定元素?即jquery删除并添加回单击事件

我有一个 $("#elem").click(function{//some behaviour});$(".elem").click(function{//some behaviour});(有超过1元),而我的其他功能getJson正在执行,我想从#elem删除点击事件,并添加它再次从功能的getJSON的onSuccess,但始终保持mouseenter和mouseleave事件?

或者,也许创建覆盖,以防止像模态窗口点击?这是更好的主意吗?

编辑:

我已经看到了一些很好的答案,但有一个细节,我省略不是故意的。有多个元素,我称className上的click函数不在elementId上,正如我在原始问题中所述

+0

事件处理程序中的初始if语句可能会检查布尔型`jsonIsLoaded`是否为true。如果是,则将其设置为“false”并继续,否则调用event.preventDefault()并返回false。这样你就不必一直绑定和解除绑定事件! – 2011-02-02 22:45:30

+0

@afEkenholm niceeee – London 2011-02-02 22:52:56

回答

6

而不是使用unbind(),这意味着你有相同的事件处理程序后重新绑定,您可以使用jQuery的data()设施与ajaxStartajaxStop事件有你的元素忽略所有的AJAX请求时click事件:

$(".elem").click(function() { 
    if (!$(this).data("ajaxRequestPending")) { 
     // some behaviour 
    } 
}).ajaxStart(function() { 
    $(this).data("ajaxRequestPending", true); 
}).ajaxStop(function() { 
    $(this).removeData("ajaxRequestPending"); 
}); 

编辑:这个答案也是ID与班级防(见提问的编辑),因为一切都匹配选择将处理AJAX事件是正确的方式。这是jQuery的主要卖点,它显示。

2

您正在寻找.unbind()。通过它'click'它会破坏点击事件。

我会把它放在你的getJSON之前,并在你的ajax调用的成功处理程序中重新绑定click事件。

0

而不是解除绑定/绑定click事件,您可以检查另一个变量的状态以查看它是否应该执行该操作。

var MyObject = { 
    requestActive = false; 
}; 

function MyJsonFunction() { 
    // when requesting 
    MyObject.requestActive = true; 
    //... 
    // when request over 
    MyObject.requestActive = false; 

} 

$("#elem").click(function{ 
    if (MyObject.requestActive == true) { 
    //do something 
    } 
});