2012-04-09 8 views
0

ich zu einem Click-Ereignisse istjquery - glücklich Clicker - Such Rückruf bei gebundenem Ereignisse

$(someSelector)).bind('click', someFunction(a,b,c)); 

function somefunction(a,b,c) { 
    return function() { 
     // some logic 
     $(anotherSelector).each(function() { 
      // fade out with call back... 
      $(this).fadeOut("fast", function() { 
       // TODO: add callback here??? 
       $(contentSelector).fadeIn("fast"); 
      }) 
     }) 

    } 
} 

Das Problem einig etwas komplexe Funktionalität bin Bindung, die eine Reihe von schnellen Klicks führen zu inkonsistenter fadeOut/fadeIn Verhalten. Ich nehme an, dass neue Klickereignisse verarbeitet werden, bevor das aktuelle FadeIn abgeschlossen ist.

Ich denke, ich suche nach einem Callback-Mechanismus, der sicherstellt, dass neue Klicks verarbeitet werden, nachdem die aktuellen Klicks abgeschlossen sind. Ich könnte einen Rückruf zu fadeIn hinzufügen, aber ich sehe nicht, was ich Art von Logik würde mir da helfen ...

Ich lese auch über die Aufhebung der Komponenten für so lange wie ein Klick verarbeitet wird (und später wieder binden) , aber wieder - ich bin mir nicht sicher, ob und mit welcher Logik ich das sagen würde.

Vielen Dank für Beratung :)

+1

Wenn ich richtig verstehe, kann die .stop() Funktion von Nutzen für Sie sein: http://api.jquery.com/stop/ –

+0

Thx, aber Stop() wird einfach die laufenden Animationen abbrechen - das ist nicht, was ich hier suche –

Antwort

1

Sie nutzen könnten .on und .off Methoden jQuery:

$someElement = $(someSelector) 
$someElement.on('click', someFunction(a, b, c)); 

function someFunction(a, b, c) { 
    // detach the event handler 
    $someElement.off('click', someFunction); 

    /* useful stuff here */ 

    // reattach the event handler 
    $someElement.on('click', someFunction(a, b, c)); 
} 

wo ich cached the jQuery element haben.

Alternativ könnten Sie eine Variable außerhalb des Anwendungsbereichs des Rückrufs erstellen, überprüft und es ist Wert innerhalb der Callback-Einstellung:

$(someSelector)).bind('click', someFunction(a,b,c)); 

var isWaiting = false; 
function somefunction(a,b,c) { 
    if (!isWaiting) { 
    isWaiting = true; 

    /* useful stuff here */ 

    isWaiting = false; 
    } 
} 

Ich würde den .on/.off Ansatz empfehlen, da es mehr direkt mit dem jQuery Ereignisse beschäftigt Bindeprozess.