1

私が次の不自然なコードを持っているとしましょう:

function runTriggers() {
    $(document).trigger('mytrigger.ns1');
    $(document).trigger('mytrigger.ns2');
    $(document).trigger('mytrigger.ns3');
    ...
}

1つのイベントハンドラーを接続して単純にリッスンmytriggerし、将来表示される可能性のある名前空間トリガーのすべてのタイプについて言及することを心配する必要がないようにするにはどうすればよいですか?

私は試しました

$(document).on('mytrigger', doSomething);

しかし、それは機能しません。

4

2 に答える 2

0

Namespaced Eventsのドキュメントによると:

$('.class').bind('click.namespace', function(){}); 
$('.class').trigger('click.namespace'); // Will trigger
$('.class').trigger('click');           // Will trigger
$('.class').trigger('click.other');     // Won't trigger

したがって、あなたの不自然なコードは間違いなく機能しませんが、次のようにロジックを逆にすることができます:

$(document).on('mytrigger.ns1', doSomething1);
$(document).on('mytrigger.ns2', doSomething2);
$(document).on('mytrigger.ns3', doSomething3);

それで:

function runTriggers() {
    $(document).trigger('mytrigger'); // will trigger all three `doSomething` handlers.
    ...
}
于 2012-11-27T02:37:19.433 に答える
0

接近できるようにするための回避策を次に示します。まず、文字列プロトタイプにメソッドを追加します。

String.prototype.namespaces = function () {
    var eventName = this + ".";
    var args = Array.prototype.slice.call(arguments);
    return eventName + args.join(" " + eventName);
}

.namespaces(namespace1, namespace2...)次に、表記法を使用して、同じイベントの複数の名前空間にバインドできます。

$(function () {

   $("#mydiv").on("someevent".namespaces("a","b"), function() {
       alert("hello"); 
    });

   $("#mydiv").trigger("someevent.a");
   $("#mydiv").trigger("someevent.b");     
});

ここにjsfiddleがあります。

于 2012-11-27T02:41:30.057 に答える