jQuery plusieurs gestionnaires de clics, comment s'assurer de l'ordre de tir?
-
05-07-2019 - |
Question
J'ai deux gestionnaires de clics liés à un élément tel que:
dans le fichier qui contient le contrôle auquel je me lie, j'ai le premier gestionnaire, qui effectue certaines fonctionnalités spécifiques à ce contrôle
$("#mycontrol").live("click", function() { alert("foo"); });
Dans la page principale qui utilise ce contrôle, j'ai un autre gestionnaire liant cet élément à une fonctionnalité spécifique à la page
$("#mycontrol").live("click", function() { alert("bar"); });
J'utilise 'live' parce que les appels AJAX changent le contrôle tout le temps, donc les gestionnaires seront réenregistrés. Cependant, j'ai besoin d'un moyen pour que " foo " se passe avant " bar " toujours ... des suggestions?
La solution
Essayez de combiner les événements de clic en un seul:
function foo() { alert("foo"); }
function bar() { alert("bar"); }
$("#mycontrol").live("click", function(){ foo.call(this); bar.call(this); });
Autres conseils
Comment ça va:
$("#mycontrol").live("click", doFooBar);
function doFooBar() {
alert("foo");
alert("bar");
}
Vous pouvez faire quelque chose comme ce qui suit:
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);