最近我被問及一個頁面上有10K +項目,你將如何去傾聽每個項目上的點擊事件。我告訴他,我只是將一個點擊綁定到每個項目,但看着他的臉,我可以告訴他這不是他正在尋找的答案。我很難找到任何有關這種用例的在線文章,這就是爲什麼我沒有在SO上提出這個問題。如果您可以提供一些示例代碼和答案來幫助說明解決方案,那將會很有幫助。在巨大的名單上的JavaScript事件綁定性能
2
A
回答
6
你可以使用事件代表團做到這一點...
var handleClick = function(e) {
// Older IEs set the `event` globally.
e = window.event || e;
// Older IEs use `srcElement` instead of the spec'd `target`.
var target = e.target || e.srcElement;
// For example's sake.
if (target.tagName.toLowerCase() == 'a' && target.className == 'some_class') {
// Handle this click.
}
}
if (document.addEventListener) {
document.addEventListener('click', handleClick, false);
} else (document.attachEvent) {
// Older IEs use `attachEvent` instead for adding event listeners.
document.attachEvent('onclick', handleClick);
} else {
// When all else fails, let's take a journey back to the 90's.
document.onclick = handleClick;
}
事件委託作品通過捕捉其通過默認情況下所有祖先元素冒泡事件。
您可以(也應該)用最接近的一致的祖先元素替換document
。
上面的代碼示例將支持您可能關心的所有瀏覽器。
如果使用庫如jQuery,代碼一般比較簡潔是...
$(document).on('click', 'a.some_class', function() {
// Handle this click.
});
0
你應該一個監聽器綁定的物品的容器,被稱爲事件代理技術。這是有效的,因爲在JavaScript中,事件通過所有節點的父節點向上冒泡到根節點。當你捕捉到事件時,你需要做一個快速檢查,確保點擊是在你想要聽的節點類型之一上。
+0
好的建議,但請注意並非所有事件都會冒泡。 – RobG 2012-03-28 14:44:57
相關問題
- 1. 命名單擊事件綁定javascript
- 2. D3在可視化巨大的XML文件中的Javascript性能
- 3. wpf提高性能綁定巨大的observablecollection
- 4. 性能問題,同時綁定gridview與巨大的數據
- 5. 巨大的性能浸
- 6. jQuery事件性能:在每個孩子的父項或單項事件上綁定一個事件?
- 7. 發現在巨大的名單
- 8. Javascript事件綁定持久性
- 9. 上的jQuery()事件綁定
- 10. 反覆綁定單元上的點擊事件解除綁定
- 11. 巨大的文件上傳
- 12. Javascript單擊移動設備上的事件性能
- 13. XmlSerializer啓動在64位系統上巨大的性能損失
- 14. 全文索引 - 在多個表上巨大的性能下降
- 15. 標值功能選擇進行性能上的巨大差異
- 16. 巨大的數據輸入webform性能
- 17. foreach的巨大性能問題
- 18. MongoDB巨大的批量插入性能
- 19. Flex webservice巨大的性能問題
- 20. 巨大的性能影響(Angular2)
- 21. 從一個巨大的名單
- 22. 用於顯示巨大表格數據的Javascript性能建議
- 23. 如何在保留事件綁定的javascript中克隆表單
- 24. 在Java中解壓縮巨大的gz文件和性能
- 25. 性能 - 在C中逐行讀取巨大的FASTA文件C
- 26. Javascript事件鏈接/綁定
- 27. 正確綁定javascript事件
- 28. 綁定javascript鍵盤事件
- 29. Knockout的「with」綁定在包含的綁定上丟失事件
- 30. 更改Qml中的JavaScript綁定事件?
+100不只是使用jQuery – mowwwalker 2012-03-28 04:40:41
@Walkerneo只有jQuery的答案一個jQuery標籤的問題:) – alex 2012-03-28 04:41:57
+1 :-) [SO限制] – RobG 2012-03-28 04:43:39