jQueryの複数クリックハンドラー。発射の順序を保証する方法は?
-
05-07-2019 - |
質問
次のような要素に2つのクリックハンドラーがバインドされています:
バインドしているコントロールを含むファイルには、そのコントロールに固有の機能を実行する最初のハンドラーがあります
$("#mycontrol").live("click", function() { alert("foo"); });
そのコントロールを使用するメインページには、ページ固有の機能のためにその要素にバインドする別のハンドラーがあります
$("#mycontrol").live("click", function() { alert("bar"); });
AJAX呼び出しは常にコントロールを変更するため、「ライブ」を使用します。そのため、ハンドラーは再登録されます。しかし、" foo"ができるようにする方法が必要です" bar"の前に発生する一貫して...提案はありますか?
解決
クリックイベントを1つに組み合わせてみてください:
function foo() { alert("foo"); }
function bar() { alert("bar"); }
$("#mycontrol").live("click", function(){ foo.call(this); bar.call(this); });
他のヒント
概要:
$("#mycontrol").live("click", doFooBar);
function doFooBar() {
alert("foo");
alert("bar");
}
次のようなことができます:
var arrEventHandlers = [];
function registerClickEvent(fnCallback)
{
arrEventHandlers.push(fnCallback);
}
registerClickEvent (function () { alert ("Foo"); });
registerClickEvent (function () { alert ("Bar"); });
function clickHandler ()
{
for (var i = 0, size = arrEventHandlers.length; i < size; i++)
{
arrEventHandlers[i].apply (...);
}
}
$("#mycontrol").live("click", clickHandler);
所属していません StackOverflow