event.preventDefault()
将覆盖元素的默认事件行为。如何临时覆盖所有点击绑定,而不仅仅是默认的?或者有没有办法保存所有的点击绑定,以便我可以解开它们并在以后使用它们?
好吧,这不是一个正确的答案,而是一种解决方法。我们可以将所需的处理程序压入堆栈顶部,然后使用 return false 来停止其他绑定。https://github.com/private-face/jquery.bind-first
event.preventDefault()
将覆盖元素的默认事件行为。如何临时覆盖所有点击绑定,而不仅仅是默认的?或者有没有办法保存所有的点击绑定,以便我可以解开它们并在以后使用它们?
好吧,这不是一个正确的答案,而是一种解决方法。我们可以将所需的处理程序压入堆栈顶部,然后使用 return false 来停止其他绑定。https://github.com/private-face/jquery.bind-first
您可以使用jQuery.clone(true)
它的作用是返回元素的数据。设置为 true 的参数意味着也复制所有事件。
因此,如果您将元素克隆到变量中,您可以通过简单地将目标元素替换为其较旧的克隆(具有旧事件)来恢复旧的点击事件
所以它是这样的:
第 1 步:将目标元素克隆jQuery.clone(true)
到一个变量中
第 2 步:使用从目标元素中删除所有点击事件jQuery.off('click')
第 3 步:将您的事件绑定到目标元素jQuery.on('click' function etc...)
第 4 步:完成后,将目标元素替换为其克隆(具有旧事件)
(对于 JSFiddle 的简单性,我很快就对其进行了模拟,但我没有使用它的示例情况。)
编辑:我忘了解释jQuery.clone(true)
您可以使用
element.addEventListener(type, listener[, useCapture]);
这样,您可以在触发 jQuery 点击处理程序之前“捕捉”点击,就像这样(我从这个 stackoverflow 问题中获取:
document.addEventListener('click', function(e) {
e.stopPropagation();
}, true);
有关更多信息(以及一些 IE < 9 支持),请参阅developer.mozilla
编辑:来自 Mozilla 的有关 useCapture 的详细信息:
如果为真,useCapture 表示用户希望启动捕获。启动捕获后,指定类型的所有事件将被分派到注册的侦听器,然后再分派到 DOM 树中它下面的任何 EventTarget。通过树向上冒泡的事件不会触发指定使用捕获的侦听器。有关详细说明,请参阅 DOM 级别 3 事件。如果未指定,useCapture 默认为 false。
如果您可以控制所有 JS 代码并且可以先绑定自己的处理程序,并且所有其他事件处理程序都与 jQuery 绑定,那么您可以这样做:
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
。
演示:http: //jsfiddle.net/NCa5X/
jQuery 按照绑定的顺序调用处理程序,因此您可以使用它event.stopImmediatePropagation()
来防止调用其他处理程序。