2012-07-13 38 views
1

我希望我会清楚,但我的情况和我想做的有点复杂。javascript(jQuery)未知事件管理

我将开始与this jsfiddle

正如你可以看到,有3个嵌套块解释我的问题。 JavaScript代码分为两部分:第一部分是我无法改变的东西(当然,其实我不想碰它:x)。这个脚本在所有的块上创建事件,并用“return false”来停止传播(我对“e.stopPropagation”有同样的问题)。 javascript的其他部分是我写的脚本。按下回车键后,我想要改变点击的行为:当我点击#b(或#c至少在#b)时,我想显示“gruik”,只显示“gruik”。要做到这一点,我杀了其他“点击”事件(来自我无法改变的代码)并创建我自己的“点击”事件。

现在,我的真实情况是:“我不能改变的代码”是高级库(18,000行代码,我并不真正想深入),它创建了一些图形(由我的块代表例)。我真的不知道他们是否使用'live','bind'或'delegate',我不知道哪个块附有事件(图中有几个嵌套块)。

现在我的问题:我在我的例子中杀了一些事件,但它不合适,原因如下:我可能杀死(并解除绑定+ undelegate)所有图形容器的所有子项中的“click”事件,但是在那之后我怎么能“复活它们”呢?所以,第一个问题是:杀死一个事件以便将它“复活”到某个地方是否可能?

另一种解决方案是为我自己的事件创建一个“最高优先级”而不会杀死任何人,但我认为这在Javascript中不可行。

我希望我已经足够清晰:/

PS:第一a demo of highstock library

回答

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