有没有办法使用jQuery临时覆盖元素上的所有点击绑定?

时间:2013-06-14 10:30:09

标签: javascript jquery

event.preventDefault()将覆盖元素的默认事件行为。我如何暂时覆盖所有点击绑定而不仅仅是默认绑定? 或者有没有办法保存所有点击绑定,以便我可以取消绑定它们并在以后使用它们?

这不是一个正确的答案,而是一个解决方法。我们可以在堆栈顶部推送所需的处理程序,然后使用return false来停止其他绑定。 https://github.com/private-face/jquery.bind-first

3 个答案:

答案 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

演示:http://jsfiddle.net/NCa5X/

jQuery按照绑定的顺序调用处理程序,因此您可以使用event.stopImmediatePropagation()来阻止其他处理程序被调用。