私が読んだことから、これはうまくいくはずです...
$('#test').on "newMessage", ->
alert('test')
$(document).on "newMessage", ->
alert('document')
$.event.trigger('newMessage')
「テスト」アラートが表示されない理由を誰かが理解するのを手伝ってくれますか?
私が読んだことから、これはうまくいくはずです...
$('#test').on "newMessage", ->
alert('test')
$(document).on "newMessage", ->
alert('document')
$.event.trigger('newMessage')
「テスト」アラートが表示されない理由を誰かが理解するのを手伝ってくれますか?
$.event は正式に文書化されていないため、現在のソースと古いバージョンの jQuery を比較し、この「機能」の削除に関する TODO を見つけました。少なくとも、それが機能しなくなった理由が説明されています。
これは、これを機能させるために使用されたコードのブロックです。
https://github.com/jquery/jquery/blob/1.6.2/src/event.js#L322-335
現在のコードはdocument
、要素が渡されない場合、要素として割り当てるだけになりました。これが、ドキュメントとウィンドウでうまく機能した理由です。
匿名の pupsub が必要な場合は、別のライブラリが必要になるようです...
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 ベースのイベント処理には適していません。