我希望我能够清楚,但我的情况和我想做的事情有点复杂。
我将开始用this jsfiddle
解释我的问题如您所见,有3个嵌套块。 javascript代码分为两部分:第一部分是我无法改变的东西(好吧,实际上我不想触摸它:x)。这个脚本在所有块上创建事件,“return false”停止传播(我对“e.stopPropagation”有同样的问题)。 javascript的另一部分是我正在编写的脚本。按下回车键后,我想改变点击的行为:当我点击#b(或#c,它在#b中)时,我想显示“gruik”而只显示“gruik”。为此,我杀了其他“点击”事件(来自我无法改变的代码)并创建我自己的“点击”事件。
现在,我的真实情况:“我无法改变的代码”是highstock库(18,000行代码,我真的不想深入研究),它创建了一些图形(在我的示例中用块表示) )。我真的不知道他们是否使用'live','bind'或'delegate'而且我不知道哪个块附加了事件(图中有几个嵌套块)。
现在我的问题:我在我的例子中杀死了一些事件,但它不合适,原因如下:我可能会杀死(并解除绑定+ undelegate)我图表容器的所有子项中的所有“click”事件,但是之后怎么能“复活它们”呢?所以,第一个问题:杀死一个事件是否有可能让它保持某个地方“复活”它?
另一个解决方案是为我自己的事件创建一个“最高优先级”,而不会杀死任何人,但我认为这在Javascript中是不可能的。
我希望我已经足够清楚了:/
答案 0 :(得分:0)
首先,执行此操作的首选方法(即禁用事件处理程序)是让事件处理程序自己知道它们是否应该继续逻辑。可能通过一些旗帜。至少,优先于bind
/ unbind
及其同类。如果您的顶级代码绝对不可修改,那么这是不可能的。
// i.e.
$(element).click(function (e) {
// bail?
if (some_flag) { return; }
// continue...
});
但是,应该可以使用jQuery get a handle on all event handlers registered for any element。有了它,你可以缓存它们unbind
,然后再次需要时重新bind
。