2009-05-05 4 views
1

Ich habe 2 Klick-Handler auf ein Element binded etwa so:jQuery Mehrfachklick-Handler..how, Reihenfolge der Zündung zu gewährleisten?

in der Datei, die das Steuerelement enthält ich bin Bindung habe ich den ersten Handler, der einige Funktionen zu dieser Kontrolle spezifische

$("#mycontrol").live("click", function() { alert("foo"); }); 

In der Haupt-Seite, die diese Kontrolle verwendet, ich habe eine andere Bindung Handler auf dieses Element für seitenspezifische Funktionalität

$("#mycontrol").live("click", function() { alert("bar"); }); 

I ‚live‘ verwenden, weil AJAX ruft die Steuerung die ganze Zeit ändern, so dass die h Andlers werden neu registriert. Allerdings brauche ich einen Weg, damit "foo" vor "bar" konsequent passiert ... irgendwelche Vorschläge?

+0

Warum ist die Funktionalität zu verändern, wenn die Ajax ist geladen? Warum verstecken Sie nicht die erste Eingabe und zeigen die zweite mit einer anderen ID? –

+1

Ich verwende ASP AJAX mit einem Datagrid, das Kontrollkästchen hat. Ich möchte den clientseitigen Click-Handler an die Checkboxen w/jquery binden, wenn die Tabelle beispielsweise sortiert oder aktualisiert wird. Der Click-Handler, der für das Steuerelement selbst spezifisch ist, setzt einige Daten abhängig vom Checkbox-Status der Handler auf der Seite macht andere Dinge mit dem Checkbox-Zustand..aber der Handler des Steuerelements muss zuerst auslösen, weil er die Daten einrichtet, die benötigt werden durch den 2. Handler in diesem Fall – puffpio

Antwort

4

Versuchen Sie, die Click-Ereignisse in einer Kombination:

function foo() { alert("foo"); } 
function bar() { alert("bar"); } 
$("#mycontrol").live("click", function(){ foo.call(this); bar.call(this); }); 
+1

Ich landete eine Stub JS-Funktion in der Subcontrol-Datei .. und der Click-Handler ruft danach es ist eigene Arbeit und in der Hauptseite, überschreibe ich die Stub-Funktion w/die Seite spezifische Funktionalität – puffpio

5

Wie geht um:

$("#mycontrol").live("click", doFooBar); 

function doFooBar() { 
    alert("foo"); 
    alert("bar"); 
} 
+1

wird dies nicht funktionieren, da sowohl die Steuerung als auch die Hauptseite beide den Live-Handler enthalten. – puffpio

2

Sie so etwas wie das folgende tun könnte:

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); 
+1

Ich mag dies, aber es ist Overkill für diese Instanz .. wenn ich mehr Zeit tun muss, denke ich werde ich mit gehen eine Lösung wie diese – puffpio

Verwandte Themen