event.preventDefault()
将覆盖元素的默认事件行为。我如何暂时覆盖所有点击绑定而不仅仅是默认绑定?
或者有没有办法保存所有点击绑定,以便我可以取消绑定它们并在以后使用它们?
这不是一个正确的答案,而是一个解决方法。我们可以在堆栈顶部推送所需的处理程序,然后使用return false来停止其他绑定。 https://github.com/private-face/jquery.bind-first
答案 0 :(得分:2)
你可以使用jQuery.clone(true)
这就是元素的返回数据。设置为true的参数也意味着也复制所有事件。
因此,如果将元素克隆到变量中,只需将目标元素替换为旧克隆(具有旧事件),就可以恢复旧的点击事件。
所以它如下:
第1步:
使用jQuery.clone(true)
将目标元素克隆到变量
第2步:
使用jQuery.off('click')
第3步:
使用jQuery.on('click' function etc...)
第4步: 当你完成后,用它的克隆(具有旧事件)替换目标元素
Here is a JSFiddle for your viewing pleasure
(抱歉JSFiddle的简单性我很快就把它嘲笑了,而且我没有使用它的示例情况。)
编辑:我忘了解释jQuery.clone(true)
答案 1 :(得分:1)
您可以使用
捕捉点击之前的点击element.addEventListener(type, listener[, useCapture]);
这样你就可以在触发jQuery点击处理程序之前'抓住'点击,就像这样(我从this stackoverflow question获取了
)document.addEventListener('click', function(e) {
e.stopPropagation();
}, true);
有关详细信息(以及某些IE< 9支持),请参阅developer.mozilla
编辑:有关Mozilla中useCapture的详细信息:
如果为true,则useCapture表示用户希望启动捕获。启动捕获后,指定类型的所有事件将被分派到已注册的侦听器,然后再分派到DOM树中它下面的任何EventTarget。向上冒泡树的事件不会触发指定使用捕获的侦听器。有关详细说明,请参阅DOM Level 3 Events。如果未指定,则useCapture默认为false。
答案 2 :(得分:0)
如果你可以控制所有JS代码,并且可以绑定自己的处理程序首先,所有其他事件处理程序都绑定到jQuery,那么你可以这样做:< / p>
var overrideClick = false;
$("#yourElementId").click(function(e) {
if (overrideClick) {
e.stopImmediatePropagation();
// e.preventDefault(); uncomment this if you want to prevent default action too
}
});
代码的其他部分会在需要时设置overrideClick = true
。
jQuery按照绑定的顺序调用处理程序,因此您可以使用event.stopImmediatePropagation()
来阻止其他处理程序被调用。