2
jQueryを使用してオブザーバパターンを実装しています。私はどの要素がイベントに応答するのかわからないので、$( 'body *')のカスタムイベントをトリガーしています。つまり、仲間の開発者がイベントを知る必要なしにイベントに対応するコードを追加できるようにしたいと考えています。私が直面している問題は、カスタムイベントにバインドされた要素の子要素がハンドラを実行することです。これらの子要素がハンドラを実行しないようにする方法はありますか?その要素は不明であるため、要素自体をトリガーすることはできません。可能であれば、ターゲット要素にクラスを追加することを避けたいと思います。ここでjQueryでObserverパターンを使用するときにカスタムイベントハンドラを複数回呼び出すのを防ぐ方法
は、いくつかのサンプルコードです:
<html>
<head>
<title>test</title>
<script src="http://code.jquery.com/jquery-1.4.4.js"></script>
<script>
$(function() {
$('#clickMe').click(function() {
$('body *').trigger('myCustomEvent');
});
$('#someDiv').bind('myCustomEvent', function(e) {
alert('someDiv responding to myCustomEvent');
});
$('#someOtherDivAddedBySomeOtherGuyLaterOn').bind('myCustomEvent', function() {
alert('someOtherDivAddedBySomeOtherGuyLaterOn responding to myCustomEvent');
});
});
</script>
</head>
<body>
<div id="someDiv">
<span>a span</span>
<span>another span</span>
</div>
<div id="someOtherDivAddedBySomeOtherGuyLaterOn">
<span>a span</span>
<span>another span</span>
</div>
<p><button type="button" id="clickMe">Click Me</button></p>
</body>
</html>
私は上記のコードでそれを試して何もしませんでした。 – Rob
本当ですか?わたしにはできる。あなたの構文をチェックしてください - あなたのコンソールのJSエラー? –
申し訳ありませんが、私はあなたの答えを誤解しました。私の解決策は、イベントを文書にバインドすることだと思います。 – Rob