1

私が読んだことから、これはうまくいくはずです...

$('#test').on "newMessage", ->
  alert('test')

$(document).on "newMessage", ->
  alert('document')

$.event.trigger('newMessage')

http://jsfiddle.net/Nbdyb/の例

「テスト」アラートが表示されない理由を誰かが理解するのを手伝ってくれますか?

4

3 に答える 3

1

$.event は正式に文書化されていないため、現在のソースと古いバージョンの jQuery を比較し、この「機能」の削除に関する TODO を見つけました。少なくとも、それが機能しなくなった理由が説明されています。

これは、これを機能させるために使用されたコードのブロックです。

https://github.com/jquery/jquery/blob/1.6.2/src/event.js#L322-335

現在のコードはdocument、要素が渡されない場合、要素として割り当てるだけになりました。これが、ドキュメントとウィンドウでうまく機能した理由です。

匿名の pupsub が必要な場合は、別のライブラリが必要になるようです...

于 2013-09-07T05:57:48.377 に答える
0

v1.7.1jqueryからv1.11.1 +にアップグレードすると、動作しなくなりました。$.event.trigger()

理由はまだわかりませんが、イベント駆動型操作 (DOM ベースのイベント処理ではない) の代替ソリューションを次に示します。


昔な日々 :

// handler
$(anyElement).on('Foo:SelfDefined:Event', function(event){
    console.log( event.self_data_1 );
    console.log( event.self_data_2 );
});
------------------
// trigger handler
var evOpts = {
    type        : 'Foo:SelfDefined:Event',
    self_data_1 : 'foo',
    self_data_2 : 'bar'
};
$.event.trigger( evOpts );

今 :

// handler
$(document).on('Foo:SelfDefined:Event', function(event, evData){
    console.log( evData.self_data_1 );
    console.log( evData.self_data_2 );
});
------------------
// trigger handler
var evData = {
    type        : 'Foo:SelfDefined:Event',
    self_data_1 : 'foo',
    self_data_2 : 'bar'
};
$(document).trigger(evData.type, evData);

注:要素 A がイベントをトリガーする場合、親ノードまたはそれ自体のみがリッスンしてそのイベントにハンドラーをアタッチできます。そのため、このソリューションは DOM ベースのイベント処理には適していません。

于 2014-06-20T05:40:41.077 に答える