1

我希望我会足够清楚,但我的情况和我想做的事情有点复杂。

我将开始用这个 jsfiddle解释我的问题

如您所见,有 3 个嵌套块。javascript 代码分为两部分:第一部分是我无法更改的(好吧,事实上我不想碰它:x)。该脚本在所有块上创建事件,并使用“return false”来停止传播(我对“e.stopPropagation”有同样的问题)。javascript 的另一部分是我正在编写的脚本。按下回车键后,我想改变点击的行为:当我点击#b(或#b 中的#c)时,我想显示“gruik”并且只显示“gruik”。为此,我杀死了其他“点击”事件(来自我无法更改的代码)并创建自己的“点击”事件。

现在,我的真实情况:“我无法更改的代码”是 highstock 库(我不想深入研究的 18,000 行代码),它创建了一些图形(在我的示例中由块表示)。我真的不知道他们是使用“live”、“bind”还是“delegate”,而且我不知道哪个块上附加了事件(图表在几个嵌套块中)。

现在我的问题:我在我的示例中杀死了一些事件,但它不适合,原因有几个:我可能会杀死(并取消绑定+取消委托)我的图形容器的所有子项中的所有“单击”事件,但怎么可能在那之后我“复活他们”?那么,第一个问题:是否有可能在杀死一个事件时将其保存在某个地方以“恢复”它?

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

我希望我已经足够清楚了:/

PS:highstock库的demo

4

1 回答 1

0

首先,这样做的首选方法(即禁用事件处理程序)是让事件处理程序自己知道它们是否应该继续逻辑。可能通过一些标志。至少,比bind/unbind和他们的同类更喜欢。如果您的顶级代码绝对不可修改,那么这是不可能的。

// i.e.
$(element).click(function (e) {
    // bail?
    if (some_flag) { return; }

    // continue...
});

但是,应该可以使用 jQuery获取为任何元素注册的所有事件处理程序的句柄。有了它,您可以缓存它们,unbind然后bind在需要时重新缓存。

于 2012-07-13T17:18:59.493 回答