回答
你在使用jQuery框架嗎?我目前正與ExtJS的工作,我發現了一類可以使用或複製
讓我們來看看在http://extjs.com/deploy/dev/docs/分機> eventmanager進行>的removeAll()
的removeAll(串/ HTML元素EL): void刪除所有來自 元素的事件處理器。通常,你會贊成 調用此版本使用 Ext.Element.removeAllListeners 直接的元素。參數:EL: 字符串/ HTML元素的ID或HTML 元素從其中刪除事件 返回:Void
我想你可以設置爲HTML元素的標籤body
關閉所有事件。 (沒有測試遺憾)
從這裏下載http://extjs.com/products/extjs/build/>選擇jquery適配器,如果你正在使用jquery> extcore就足夠了(它包含EventManager.js)。
在其他的方式,比如crescentfresh(回答N°4),我做了這個示例代碼,適用於所有節點事件:
var nodes = document.getElementsByTagName('*'); // collect your nodes however
for(var i=0; i < nodes.length; i++) {
var node = nodes[i];
Ext.EventManager.removeAll(node);
}
}
請讓我知道,如果你有使用麻煩的ExtJS我可以幫,如果我的回答很有用,就投我一票。
addEventListener讓你添加另一個事件。請注意,在IE中,你將不得不使用attachEvent。
這不會讓你定義事件的順序 - 顯然你can't predict the order the events will be fired in。所以如果你真的想要一個事件的可預測的事件隊列,你將不得不自己實現它。
您可以使用preventDefault()停止事件的默認操作,或停止使用stopPropagation()傳播嵌套事件以僅讓您的特定事件觸發。
但是不使用setTimeout()本地暫停或延遲事件,停止,保存其狀態並稍後再次在隊列中重新啓動是不可能的。
如果使用attachEvent
IE瀏覽器,你不能保證在事件被觸發順序。見http://msdn.microsoft.com/en-us/library/ms536343(VS.85).aspx
如果附加了多個功能 同一對象在同一事件中, 函數被調用以隨機順序, 後立即對象的事件 處理程序被調用。
(我確實已經看到事件是按相反順序調用的,而不是隨機的)。無論如何,圖書館一般都傾向於使用內部的attachEvent
,所以你會陷入同樣的問題。儘管如此,如果你可以檢查一個節點是否是'點擊'處理程序(例如你的標記中你的節點上有一個「onclick」屬性設置),那麼你可以在之前將「你的」放在「他們的「:
var nodes = document.getElementsByTagName('*'); // collect your nodes however
for(var i=0; i < nodes.length; i++) {
var node = nodes[i];
if(!node.onclick)
continue;
// At this point we have a node with an "onclick" attr.
// Hijack onclick to do something else first.
var original = node.onclick;
node.onclick = function() {
doSomethingElse();
return original.apply(this, arguments);
}
}
見this answer如何檢查其他圖書館的一個節點的事件(如果您正在使用一個)。您也可以將它用於doSomethingElse()
這些庫。
您可以簡單地停止的事件監聽器,只需加載使用正確的PARAMS此示例函數:
function removeEvent(obj,type,fn){
if(obj.removeEventListener) obj.removeEventListener(type,fn,false);
else if(obj.detachEvent){
obj.detachEvent("on"+type,obj[type+fn]);
obj[type+fn]=null;
obj["e"+type+fn]=null;
}
}
此外,還可以觸發一個殺死其他的聽衆和事件中的setTimeout一個重新啓用監聽一個,外部或與其他setTimeout。
一個庫來調試事件,也許有用。
超級。這讓我看着jquery doc,我發現將crescentfresh的解決方案與jQuery的unbing()方法(Extjs.removeAll()的肛門)結合起來可以解決我的問題。
所以,最後我有這樣的:
this.onclick = function(e)
if (/*trigger clause*/ true) {
//cancel all events
$(this).unbind();
return false;
} else {
//continue processing
return original ? original.apply(this, arguments) : true;
}
}
感謝意見傢伙!
PS什麼的抽搐使這個可怕的答覆編輯??!在這裏粘貼一些代碼是一件令人頭疼的事情。
PPS可惜的是,我不能投票,只有兩個回信,我不能因缺乏信譽的提高有用的標記您的回覆,我不能標記多個答案可以接受的。所以,請原諒我。愚蠢的論壇引擎,但真的很酷的人在這裏
- 1. 如何在pygame的事件隊列中添加按鍵事件
- 2. 從基於外部事件(事件隊列)的隊列中消費
- 3. 在事件中添加小部件。 Kivy
- 4. jQuery隊列事件
- 5. SDL事件隊列
- 6. jquery隊列事件?
- 7. java事件隊列
- 8. JavaScript事件隊列
- 9. 鏈接列表的實現,在頭部添加還是在尾部添加?
- 10. 如何將事件添加到Windows消息泵隊列中?
- 11. C#:將對象添加到隊列時觸發事件
- 12. 添加頭部PyQt的列表
- 13. HTTP Cookie請求頭部事件序列
- 14. jQuery條件隊列事件
- 15. 將隊列數據移動到另一個隊列的頭部
- 16. 事件隊列中的節流事件
- 17. 添加隊列到OpenJMS
- 18. JBoss 5.1.0添加隊列
- 19. 添加到等待隊列
- 20. BackgroundWorker ReportProgress事件隊列
- 21. NServiceBus事件超時隊列
- 22. pygame的事件隊列
- 23. JQuery清除隊列事件
- 24. PyV8:事件隊列滿
- 25. Javascript mousemove事件隊列
- 26. C#在隊列中添加新項目到隊列中
- 27. 如何在C#中將隊列添加到隊列<T>?
- 28. 排隊等候的事件數量? (Win32事件隊列)
- 29. 是std ::隊列有事件機制(信號在std ::隊列中)
- 30. JS頭部動態添加