是否可以删除而不是向特定元素添加回点击事件? IE
我有一个 $("#elem").click(function{//some behaviour});
, $(".elem").click(function{//some behaviour});
(有超过 1 个元素),而我的其他函数 getJson
正在执行我想从 #elem
中删除 click 事件,并在 getJson 函数中再次添加它,但同时保留 mouseenter 和 mouseleave 事件整个时间?
或者可能创建叠加层以防止在模态窗口中点击?这是更好的主意吗?
编辑:
我看过一些非常好的答案,但有一个细节我不是故意省略的。有多个元素,我在 className 上调用 click 函数,而不是在原始问题中所述的 elementId 上调用
最佳答案
而不是使用 unbind() ,这意味着您以后必须重新绑定(bind)相同的事件处理程序,您可以使用 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 的主要卖点,它显示了。