2010-02-17 6 views
11

Ich habe einen Link auf einer Webseite öffnet einen modalen Dialog. Beim ersten Klicken auf den Link wird der Initialisierungscode ausgeführt. Nachfolgende Klicks müssen nicht verarbeitet werden. Das Problem hier ist, wenn Leute auf den Link doppelklicken, wird der Initialisierungscode zweimal ausgeführt - obwohl ich sofort ein Flag setze, um zu sagen, dass ich initialisiert bin, und falls markiert, führe die Init-Funktion nicht aus. Was soll ich machen?Leute, die alles auf Webseiten doppelklicken ... jQuery double click problemo

  • Ich konnte die Klickfunktion auf diesen Link entbinden, wenn darauf geklickt, aber dann Ich muss die Funktion wieder binden, wenn der Dialog geschlossen wird.
  • Ich könnte an das Ereignis dblclick binden und false zurückgeben?
  • Ich könnte die "letzte Zeit" auf dem Element speichern, und dann überprüfen, ob say 2 Sekunden vergangen ist, bevor das Ereignis ausgelöst werden?
+2

kann nicht einfach Sie an die dblclick binden, wie gut? Ich kann nicht sehen, warum das nicht funktionieren würde. –

+0

Problem mit der Bindung an dblclick ist, dass, wenn der Benutzer doppelt klickt und ich falsch zurückgebe - der Dialog wird nicht geöffnet und der Benutzer wird gehen wtf funktioniert dieser Link nicht :) Ich denke, ich könnte ein paar Millisekunden warten und dann den Klick auslösen Funktion manuell? – superlogical

Antwort

5

Ich verwende Ben Nadel's jQuery ajax wrapper. Jedes Mal, wenn Sie eine Ajax-Anfrage erstellen, können Sie ihr optional einen Namen geben. Der Ajax-Wrapper verfolgt alle benannten Anfragen und löscht alle Duplikate, wenn er immer noch auf eine Antwort von einer früheren Anfrage mit demselben Namen wartet.

Indem Sie all Ihre Ajax-Anrufe über diese "Pipeline" absetzen, haben Sie eine großartige zentrale Kontrolle über die Handhabung jedes Anrufs.

+0

Hallo Womp - danke für die Köpfe hoch! Das ist etwas, mit dem ich ein bisschen gekämpft habe :) Ich werde es ausprobieren! – superlogical

0

Ich machte ein Plugin, um die jquery ajax-Methode zu erweitern und ein Singleton-Flag mit einem zusätzlichen Blockierungsflag hinzuzufügen, um ajax anzuweisen, alle nachfolgenden Aufrufe mit dieser URL (oder Schlüssel) zu ignorieren.

Sie rufen ajax normalerweise mit extra {Singletons: true, Sperrung: true} Optionen

Wenn Sie die gleiche Ajax-Aufruf zweimal der zweite Anruf wird nicht ausgelöst, wenn der erste Anruf noch verarbeitet wird. V praktisch so weit:

http://github.com/dougle/jQuery-Ajax-Singleton

+0

Ich denke, ich würde es ausprobieren müssen :) Mein Problem hat eigentlich nichts mit Ajax zu tun - es macht eine ganze Menge von YUI-Widget Sachen, die sehr teuer ist. Ja, das Einpacken der jQuery Ajax-Sachen ist in Ordnung, wenn ich Ajax mache. Aber in diesem Fall ist es mit einem Doppelklick zu tun .. – superlogical