我想在HTML頁面上的多個按鈕上使用事件委託。這些按鈕遍佈整個頁面,我想知道在點擊事件中監聽整個文檔是多麼昂貴,然後讓點擊事件觸發事件委託處理程序。這是否比在20個以上的按鈕上放置聽衆更昂貴(它可以增長到超過100個按鈕,是的,這很愚蠢)?在整個文檔上監聽事件的成本有多高?
2
A
回答
1
我不明白它會如何更昂貴,因爲它將監聽文檔對象而不是25個錨點對象的點擊。就這樣說,只有25-30個按鈕並不是真正的資源密集型,所以你可能不需要擔心這一點。
1
這是jQuery「live」方法所使用的策略:對整個文檔進行偵聽,然後根據條件(即選擇器)測試發送方。除非選擇器的強度無法忍受,否則這種技術對於大型且不斷增長的目標組更爲有效。
0
你很難嗎?工作代碼不是很好的代碼。
如果在頁面中使用20〜40個按鈕偵聽器,而不是使用委託,那麼它將工作,並且可能您甚至不會看到任何性能問題。我想你會使用forin/$。each來綁定所有這些監聽器,所以你不需要爲每個監聽器編寫代碼。
所以,我的請求是請使用委託。
如果將來您需要更改邏輯或者您決定測試應用程序,那麼您將遇到麻煩。
2
我不明白怎麼會是更昂貴的,因爲它會聽的文檔對象,而不是25錨上點擊對象
這裏的關鍵思想是深度。您的事件在執行前必須遍歷DOM。如果您的元素深入DOM樹,您可能會注意到一些性能下降。
幾件事情要記住:
- 錨事件委派不要緊的數量,這是真的
- 一般來說事件代表團在大多數情況下一個更好的選擇,但它的沒有用所有的時間
我的建議是分析這些類型的問題,學到的東西是如何工作的,並通過良好的老常識作出決定。
相關問題
- 1. Laravel監聽器監聽多個事件
- 2. 多個事件的事件監聽器
- 3. 事件監聽器上元/文件的高度在JavaScript
- 4. 文檔庫 - 項目事件監聽器
- 5. 監聽事件的多個功能
- 6. 監聽$範圍內的多個事件
- 7. 如何在整個頁面上監聽按鍵事件?
- 8. NHibernate多事件監聽器
- 9. 舞臺上有多少個事件監聽器?
- 10. 陣營本地監聽所有事件
- 11. 多個複選框事件監聽器
- 12. 多個事件監聽器(帶SSCCE)
- 13. Dropzone JS聽取成功上傳多個文件的事件
- 14. java事件和監聽器,一個類中的多個事件
- 15. onchange事件監聽器未在文本框上觸發
- 16. JTextArea文檔監聽器更新文本
- 17. 多個頁面上的jqm側面板的事件監聽器
- 18. 文本字段上的Javascript事件監聽器
- 19. 保持小書籤生成多個事件監聽器
- 20. 添加事件偵聽器,以形成由事件監聽器
- 21. 監聽多個文本字段
- 22. 一個HTML元素監聽一個事件,然後監聽另一個事件
- 23. 多事件監聽器的設計
- 24. 如何知道頁面上有多少事件監聽器
- 25. jQuery事件監聽
- 26. 事件監聽器?
- 27. Laravel事件監聽
- 28. 在JavaScript中監聽所有事件
- 29. 在C++中監聽事件
- 30. 爪哇 - 在事件監聽
20+意味着它增長到100+ :)抱歉,我應該說明。如果它是一個鼠標懸停事件,它會更昂貴嗎?對於鼠標懸停在頁面上的每個元素,都不會觸發它嗎? – stevebot 2011-02-23 16:40:00
「我不明白A怎麼會更昂貴,因爲它會是A.」 o.O – 2011-02-23 16:40:05
@stevebot - 在這種情況下,是的,你應該委託。比100位船上的聽衆好得多。 – 2011-02-23 16:41:33