9

私がやろうとしていることの簡略版は次のとおりです。

var indication = $('#some-div');
indication.bind('custom-event', function() { ... }


 // ... later on!

 function OtherThing() {
   $(this).trigger('custom-event');
 }

二人がお互いをはっきりと知らなくてもindication.bind('custom-event')、トリガーを受け取りたいのですが。function OtherThingこれは可能ですか?これまでの私の唯一の解決策は、リスナーとイベントの両方をボディにバインドすることです...これはずさんなようです-より良い方法はありますか?

4

1 に答える 1

23

JavaScriptでは、各HTML要素でトリガーされたイベントが親に伝播されるため、問題を解決し、$('*').bind('custom-event')すべての要素の共通の親にリスナーをバインドするなどの問題を発生させることなく、任意の要素がカスタムイベントを処理できるようにします。 、bodyまたはhtml要素:]

bodyしたがって、イベントをまたはhtml要素にバインドするだけで済みます。次に、選択した親要素内のいずれかの要素がカスタムイベントをトリガーすると、その要素はこの親要素に伝播されます。

次に、イベントハンドラーでtarget、イベントオブジェクトの属性にアクセスすることにより、イベントをトリガーした要素にアクセスできます。event.target

したがって、コードは次のようになります。

$('body').bind('custom-event', function(e){
  var $element = e.target;
});

$('#anyElement').trigger('custom-event');
于 2012-03-20T17:54:17.863 に答える