2

私はpub-subのこのjQueryの方法を試していますが、部分的にしか機能しません:

<button id="button1">click1</button>
<button id="button2">click2</button>
<div id="div1">div1</div>​

$("button:first").bind('bla', function (e, text) {
    alert("bla1 " + text);
});
$("#div1").bind('bla', function (e, text) {
    alert("div " + e, text);
});

$("button:last").click(function () {
    $("button:first").trigger('bla', ["ilya"]);
});​

イベントが on でのみトリガーされ、 on ではトリガーされbutton1ないのはなぜdiv1ですか?

更新: バインドされている要素を呼び出さずに、バインドされたすべてのカスタム イベントをトリガーする方法はありますか?

4

4 に答える 4

6

div でもトリガーする必要があります。

$("button:last").click(function () {
    $("button:first, #div1").trigger('bla', ["ilya"]);
});​

編集

あなたのフォローアップの質問を見ました。ここでのユースケースが何であるかは完全には明らかではありませんが、私の提案は次の2つのアプローチのいずれかです。

---1---たとえば、カスタム イベントをリッスンする要素に CSS クラスを追加しclass="my-listener"ます。

<button id="button1" class="my-listener">click1</button>;
<button id="button2">click2</button>;
<div id="div1" class="my-listener">div1</div>;

...と...

// Your original lister code is fine.  Only need to do these individually (as opposed to my original suggestion, above) if you need each element to do something different when it catches the event)
$("button:first").bind('bla', function (e, text) {
    alert("bla1 " + text);
});

$("#div1").bind('bla', function (e, text) {
    alert("div " + e, text);
});

...次に、次のようにイベントをトリガーします。

$('.my-listener').trigger('bla', ["ilya"]);

それはうまくいくはずです。

---2---オブジェクトでイベントをトリガーするだけwindowで、単一のリスナーの各要素に必要な処理を実行するロジックを持つ単一のリスナーを用意します。

$(window).bind('blah', function(event, data){
    // Do something for button:last
    // Do something with #div1
    // etc.
});

$(window).trigger('bla', ['ilya']);

どのアプローチを使用するか (他にもあると思います) は、何を達成しようとしているかによって異なります。

乾杯

于 2012-05-09T18:12:09.387 に答える
5

でトリガーしていないためです#div1

$("button:last").click(function () {
    $("button:first").trigger('bla', ["ilya"]);
    $("#div1").trigger('bla', ["ilya"]); // you need to trigger it
});

http://jsfiddle.net/5XZbY/

于 2012-05-09T18:10:53.797 に答える
3

なぜトリガーする必要があるのですか?

をクリックする#button2と、イベントによって からclickイベントがトリガーされます。からのイベントは決してトリガーされません。このようなものが欲しいですか?blabutton1bla#div1

http://jsfiddle.net/j4yKU/

$("button:last").click(function () {
    $("button:first, #div1").trigger('bla', ["ilya"]);
});
于 2012-05-09T18:12:58.080 に答える
0

2番目のボタンをクリックすると、最初のボタンで「bla」がトリガーされ、テキストが終了したことを警告します。最初のボタンの「bla」イベントで div のイベントをトリガーする必要があります。

于 2012-05-09T18:20:17.733 に答える