2012-07-13 41 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