是否可以删除而不是将click事件添加到特定元素?即
我有一个 $("#elem").click(function{//some behaviour});
,$(".elem").click(function{//some behaviour});
(有多个元素),而我的另一个函数getJson
正在执行我想删除点击来自#elem
的事件,并从getJson函数再次添加它,但是一直保留mouseenter和mouseleave事件?
或者也许创建叠加以防止在模态窗口中点击?这是更好的主意吗?
编辑
我已经看到了一些非常好的答案,但有一个细节我没有故意省略。有多个元素,我调用className上的click函数而不是我在原始问题中所说的
答案 0 :(得分:6)
而不是使用unbind(),这意味着您以后必须重新绑定相同的事件处理程序,您可以使用jQuery的data()工具来处理ajaxStart和ajaxStop个事件在所有AJAX请求期间让您的元素忽略click
个事件:
$(".elem").click(function() {
if (!$(this).data("ajaxRequestPending")) {
// some behaviour
}
}).ajaxStart(function() {
$(this).data("ajaxRequestPending", true);
}).ajaxStop(function() {
$(this).removeData("ajaxRequestPending");
});
编辑:此答案也是 id-to-class-proof (请参阅提问者的编辑),因为与选择器匹配的所有内容都将以正确的方式处理AJAX事件。这是jQuery的主要卖点,它表明了。
答案 1 :(得分:2)
您正在寻找.unbind()
。传递它'click'
,它将破坏点击事件。
我会把它放在你的getJSON
之前,并在你的ajax调用的成功处理程序中重新绑定click事件。
答案 2 :(得分:0)
你必须做一些额外的脚本。没有回调。请看一下这里:jQuery - How can I temporarily disable the onclick event listener after the event has been fired?
答案 3 :(得分: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
}
});