最近、10K +アイテムのページで質問されましたが、各アイテムのクリックイベントをどのように聞くのですか?私はそれぞれのアイテムにクリックをバインドするだけだと言いましたが、彼の顔を見ると、彼が探していた答えではないことが分かりました。このタイプのユースケースに関するオンライン記事を見つけるのは苦労している。だから私はこれを頼んでいないのだ。解決策を説明するのに役立つサンプルコードを回答に付けることができれば助かります。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のイベントですべてのノードの親をルートノードにバブルアップするために機能します。あなたがイベントをキャッチするときは、あなたが聞きたいノードタイプの1つにクリックがあることを確認するために、すばやくチェックする必要があります。
+0
良い提案ですが、すべてのイベントがバブルになるわけではありません。 – RobG
関連する問題
- 1. 巨大なXMLのNokogiriビルダーのパフォーマンス?
- 2. 巨大なリストのNativeScript virtualScroll
- 3. JavaScriptの巨大なページ
- 4. JavaScriptの巨大なメモリリーク
- 5. リスト内の巨大なデータのファセットグリッド
- 6. 巨大なデータベースのリストの代わり
- 7. C#の巨大なリストをフィルタリングする最もパフォーマンスの良い方法は?
- 8. 「巨大なバグが」
- 9. 巨大なパフォーマンスの低下 - 問題のベクトルですか?
- 10. urllib2.HTTPError:Webスクラップ中に巨大なリスト
- 11. 巨大なリストに似た名前
- 12. 巨大なサイトにPHPがあるすべてのファイルのリスト
- 13. Javascript Image onloadイベントバインディング
- 14. 巨大なバイナリサイズ
- 15. 巨大なビットマップ
- 16. 巨大なリストを割り当てるよりもRubyの `lazy`パフォーマンスが低いですか?
- 17. 大きなテキストの巨大なリストを検索する最速の方法
- 18. Android非常に巨大なリサイクラビューのアイテムのリスト
- 19. 私はラインでの巨大なウェブサイトのリストをしました
- 20. コンストラクタの巨大なスイッチステートメント
- 21. スクロールイメージの巨大な遅延
- 22. OneDriveの巨大なストリーミングアップロード
- 23. 巨大なガベージオブジェクトの取得
- 24. 巨大なLinkedListのトラバーサル
- 25. リストボックス(テーブル)の巨大なデータ
- 26. 巨大なデータベースのキャッシング
- 27. 角の巨大なスタックトレース
- 28. gzipの巨大なファイル(〜30G)
- 29. パンダの巨大なデータフレーム
- 30. Dockerコンテナの巨大なファイル
+100 jQueryを使用しているだけではありません。 – mowwwalker
@Walkerneo jQueryのタグ付けされた質問の回答が – alex
+1 :-) [SO制限] – RobG