Javascript jquery临时解除绑定事件

Javascript jquery临时解除绑定事件,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,也许我完全忽略了jQuery中的处理,但这是我的问题 假设有一些事件绑定,比如 $(element).bind("mousemove", somefunc); 现在,我想引入一个新的mousemove绑定,它不会覆盖上一个绑定,而是临时排除(取消绑定)它。换句话说,当我绑定我的函数时,我必须确保没有其他函数会为该事件执行,直到我恢复它们 我要找的东西是: $(element).bind("mousemove", somefunc); // Somefunc is used regularly

也许我完全忽略了jQuery中的处理,但这是我的问题

假设有一些事件绑定,比如

$(element).bind("mousemove", somefunc);
现在,我想引入一个新的mousemove绑定,它不会覆盖上一个绑定,而是临时排除(取消绑定)它。换句话说,当我绑定我的函数时,我必须确保没有其他函数会为该事件执行,直到我恢复它们

我要找的东西是:

$(element).bind("mousemove", somefunc);
// Somefunc is used regularly
var savedBinding = $(element).getCurrentBinding("mousemove");
$(element).unbind("mousemove").bind("mousemove", myfunc);
// Use myfunc instead
$(element).unbind("mousemove", myfunc).bind("mousemove", savedBindings);
当然,somefunc不在我的控制之下,否则这将毫无用处:)

我的理解是,可以将多个函数绑定到同一个事件,并且这些函数的执行不能预先确定。 我知道停止事件传播和立即事件传播,但我认为它们在我的情况下是无用的,因为无法确定执行顺序(但可能我弄错了)

我该怎么做? 提前谢谢 ~Aki

编辑:我需要强调这一点:我需要之前安装的处理程序(somefunc)没有被执行。我并没有定义这个处理程序,它可能存在也可能不存在,但它是由第三方用户安装的


EDIT2:好的,这现在不可行,我想我需要eventListenerList,它还没有在大多数浏览器中实现

另一种方法是使用自定义事件,大致如下:

var flag = 0;
$(element).bind("mousemove", function() {
    if(flag) {
        $(this).trigger("supermousemove");
    } else {
        $(this).trigger("magicmousemove");
    }
}).bind("supermousemove", function() {
    // do something super
}).bind("magicmousemove", function() {
    // do something magical
}); 

$("#foo").click(function() {
    flag = flag == 1 ? 0 : 1; // simple switch
});

非常烦人的演示:如果事件绑定到多个元素,则很好:

$('.foo').click(function() {
    if ( ! $(this).hasClass('flag')) {
        do something
    }
});

(将类'flag'添加到解除绑定的排序中,将其添加到'bind')

Oops,对不起,我错了:该解决方案不起作用,因为我需要禁用以前绑定的mousemove处理程序。@AkiRoss-为什么需要禁用以前的处理程序?通过翻转开关,您可以获得相同的效果。@Jason,因为如果用户将函数绑定到事件,而我正在引入新事件,我可能需要截获该事件并触发另一个事件,而不让原始函数执行。