Verhindert, dass die Funktion zweimal ausgelöst wird, wenn sie an die Eingabe im Fokus gebunden ist, und klicken Sie auf

8

Ich versuche, ein Ereignis sowohl auf click als auch auf focus auszulösen, aber ich möchte nur, dass es einmal ausgelöst wird. Wenn ich in eine Eingabe klicke, wird sie zweimal ausgelöst (klicken und fokussieren). Wie kann ich das verhindern?

%Vor%     
kylex 08.07.2013, 16:37
quelle

3 Antworten

10

Sie können stattdessen .one verwenden. Dadurch wird das Ereignis nur einmal ausgelöst, aber es wird auch die Bindung entfernt, sobald sie ausgelöst wurde:

%Vor%

Wenn Sie die Bindung beibehalten müssen, müssen Sie den Status der Maustaste und das aktuelle Ziel, das mousedown ausgelöst hat, im Auge behalten:

%Vor%

Siehe Testfall auf jsFiddle .

    
mekwall 08.07.2013, 16:41
quelle
8

Eine kleine Hysterese könnte eine Option sein. Im Prinzip notieren Sie das letzte Mal, wann Sie auf ein Ereignis geantwortet haben und ignorieren nachfolgende Ereignisse innerhalb einer Schutzzeit.

Sie könnten dafür die data von jQuery verwenden (Beispiel am Ende der Antwort), aber ich bevorzuge das: Ein universeller Entpreller:

Live-Beispiel mit click und focus | Live-Quelle

%Vor%

Die Funktion debouncer :

%Vor%

(Der Name "Entpreller" ist ein gebräuchlicher Begriff für etwas, das Hysterese verwendet, um Eingaberaten zu begrenzen. IIRC, kommt von "Schalter Entpreller", der eine (sehr) einfache Schaltung ist, um zu vermeiden, eine Aktion hunderte Male auszulösen wenn ein elektrischer Schalter mit mechanischer Umschaltung von offen zu geschlossen wird und umgekehrt, da, wenn die Kontakte in die Nähe kommen, eine große Anzahl von geschlossenen / offenen / geschlossenen / offenen / geschlossenen / offenen Ratterungen auftreten kann, bevor der Schalter stabil wird Dieser Chat wird " hüpfen , also" Entpreller "genannt.")

Der Ansatz verwendet nur jQuerys data :

%Vor%     
T.J. Crowder 08.07.2013 16:41
quelle
1

Das ist eine alte Frage, aber ich konnte keine anderen Antworten finden, wie zum Beispiel, was mein Problem gelöst hat. Also poste ich es hier für jeden, der zufällig auf dieses Problem im Jahr 2015 stößt.

%Vor%
  1. Dies löst das Ereignis nur beim Klicken aus. Ich bin mir nicht sicher, was hinter den Kulissen passiert, also kann mir vielleicht jemand das erklären, aber Tabs und Fokus erscheinen unberührt und funktionieren zu 100%.

  2. Dadurch wird das ausgewählte Objekt nicht fokussiert, aber der Fokuspfad wird wieder an den Anfang des Dokuments gesetzt. Ich lasse das hier, damit ich das ausgewählte Element erneut anklicken kann, um ein Menü zu deaktivieren. Ich suche immer noch nach einem Fix, um den Fokuspfad zu behalten.

Bearbeiten: Besserer Weg:

%Vor%
  1. Klicken löst einen Fokus aus, aber der Fokus wird niemals einen Klick auslösen. Führen Sie einfach den Code für das Fokusereignis aus.
Dustin 04.03.2015 06:48
quelle

Tags und Links