gpt4 book ai didi

javascript - jQuery 临时解除绑定(bind)事件

转载 作者:可可西里 更新时间:2023-11-01 02:09:34 26 4
gpt4 key购买 nike

也许我完全遗漏了一些甚至在 jQuery 中处理的东西,但这是我的问题。

让我们假设有一些事件绑定(bind),比如

$(element).bind("mousemove", somefunc);

现在,我想介绍一个新的 mousemove 绑定(bind),它不会覆盖以前的绑定(bind),而是暂时排除(取消绑定(bind))它。换句话说,当我绑定(bind)我的函数时,我必须确保在我恢复它们之前不会为该事件执行任何其他函数。

我正在寻找类似的东西:

$(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 不在我的控制之下,否则这将毫无用处:)

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

我该怎么做?

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

EDIT2:好的,这现在不可行,我想我需要 eventListenerList,它在大多数浏览器中尚未实现。 http://www.w3.org/TR/2002/WD-DOM-Level-3-Events-20020208/changes.html

最佳答案

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

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
});

这里的演示非常烦人:http://jsfiddle.net/SkFvW/

关于javascript - jQuery 临时解除绑定(bind)事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3408082/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com