0

jQueryを適用する方法について2つのアプローチを念頭に置いていますevent.stopPropagation()

  1. 楽観的なアプローチ-デフォルトでは、すべてのイベントハンドラーにはがありません stopPropagation()stopPropagation()イベントのバブリングによって引き起こされる不要で望ましくない動作がある場合にのみ、ハンドラーに追加されます。
  2. 悲観的なアプローチ-デフォルトでstopPropagation()は、すべてのイベントハンドラーに追加されます。バブリングさえも切断されたためにいくつかの望ましい動作が欠落している場合、対応stopPropagation()する動作は削除されます。

私は、2つのうちどちらか、またはどちらも、stopPropagation()開発に利用するときに持つべき考え方ではないかと考えていました。不必要なバブリングが防止されるため、パフォーマンスが向上するように見えるため、2)に傾倒しています。このトピックについて専門家から聞きたいです。

4

2 に答える 2

3

stopPropagationどこにでも電話をかけるのは良くありません。これはイベントの委任*を中断し、ページ上のすべての要素に文字通りハンドラーを追加しない限り(そして、それを行う場合は、イベントの委任を使用する必要があります)、おそらく効率が低下します。

したがって、経験則:stopPropagation必要な場合にのみ電話してください。


*つまり、、、.liveおよび.delegateのデリゲートバージョン.on


これは、リスナーの作成に追加された要素から発生するイベントをリッスンするためにバブリングに依存するイベント委任の例です。

document.documentElement.addEventListener('click', function(e) {
    if(e.target.nodeName === 'a') {
        console.log('A link was clicked!');
    }
});

これを破るjQueryを投入している人がいます:

$('div').click(function(e) {
    e.stopPropagation();
});

aの子孫<a>であるものは、<div>クリックが処理されなくなります。これをしないでください。

于 2012-04-19T23:19:34.023 に答える
1

stopPropagation本当に必要な場合にのみ電話してください。また、jQuery関数を使用して停止すると、イベントが要素に格納されるliveため、ライブハンドラーが呼び出されることはありません。livedocument

于 2012-04-19T23:24:47.480 に答える