2

barelement に" " という名前のイベントがあるとします#foo

リスナーがイベントをキャンセルするbarかどうかに関係なく、jQuery 遅延オブジェクトを使用して、イベント リスナーが実行された (返された)直後に関数を強制的に実行する方法はありますか?bar

それとも、これにはjQueryさえ必要ないのでしょうか?

編集: 明確にするために、barハンドラー内から別のイベントまたは関数をトリガーすることは、私が探しているものではありません。barハンドラーはまだ返されていないため、「そのbarイベントの後」ではありません。IE 8 の非常に具体的な問題/バグに対処しようとしているため、この質問は奇妙で意味がないように思えるかもしれません。

このようなものが必要です:

$('#foo').afterEvent('bar').then(function() {
    // do something
});
4

2 に答える 2

0

やりたいことはマルチキャスト デリゲートと呼ばれ、複数の独立したハンドラーを同じイベントに割り当てます。以下のように JavaScript で記述できます。

    function multicast(){
if (arguments == null || arguments.length == 0) return function(){ };

var fns = [], j = 0;
for (var i = 0; i < arguments.length; i++){
if (typeof(arguments[i]) == "function")
fns[j++] = arguments[i];
}

return function(){
for (var i = 0; i < fns.length; i++)
fns[i]();
};
}

次に、次のように呼び出します: (foo と bar は両方とも関数です)

window.onload = multicast(window.onload, foo, bar); 

JQuery は必要ありません。これは厳密には JavaScript です。各関数は順次実行されますが、以前の関数呼び出しの戻り値 (存在する場合) とは無関係であることがわかります。

これについてのより完全な説明はDelphic Sageにあります。また、リンクされた記事の著者は、John Resig のチュートリアルLearning Advanced JavaScriptの功績を認めていることにも注意してください。

[編集] あなたの質問には何かが欠けていると思います。私がそれを読んだ方法は、これがあなたが求めていることをするはずです:(上記の関数multicast()を使用して)

$(#'foo').bind('bar',multicast(firstFunction, secondFunction);

これで、'bar' が発生すると firstFunction が実行され、その後すぐに secondFunction が実行され、firstFunction が「イベントをキャンセル」するかどうかに関係なく実行されます。

于 2012-01-26T02:27:59.063 に答える
0

バーイベント内で別のメソッドを実行するだけです

$('#foo').bind('bar', function () {
    // do bar stuff
    // run another method
    baz();
    // or trigger any other listening events
    $('#bin').trigger('otherEvent');
});
于 2012-01-26T02:09:18.553 に答える