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?

Était-ce utile?

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top