多くの JS スクリプトでイベント委任を使用しています。通常、私が行うことは、グローバル イベント ハンドラーを用意し、イベントを受け取った要素までトレースすることです。問題は、イベントをインストールするときに jQuery のフィルタリング セレクターを常に使用できるとは限らないことです。たとえば、使用している場合:
$('.todo').on('click', function(e) {
// The event target is guaranteed to be something having the
// class .todo
var todo = e.target;
});
それならとても簡単です
ただし、バックボーンでビュー イベントの委譲を行っているので、イベント ハンドラーをインストールできます。
'click .todo' : 'someHandlerFunction'
問題は、そのハンドラー関数にあります。右側のイベント ターゲットを受け取ることが保証されていませんが、代わりにその子孫の 1 つを取得できます。つまり、イベント オブジェクトを取得していますが、バブリングにより、そのターゲットは ".todo" クラスを持つ何かの内部の要素になることもあります。
理想的には、これを行う単純な関数が必要です。
$(document.body).on('click', function(evt) {
var interestingElementOrNull = jQuery(evt.target).parentOrSelf('.todo');
});
しかし、最初hasClass()
にイベント ターゲットに対して実行する必要があり、次に (一致しない場合)parent()
呼び出しを実行する必要があります。
これを行うためのより良い/標準的な方法はありますか?