Ich habe einen einzelnen Knopf in li mit ID "my_id"
. Ich habe diesem Element zwei jQuery-Ereignisse angehängt
1.
$("#my_id").click(function() {
alert('single click');
});
2.
$("#my_id").dblclick(function() {
alert('double click');
});
Aber jedes Mal gibt es mir die single click
javascript
jquery
jquery-events
user426795
quelle
quelle
Antworten:
Sie müssen eine Zeitüberschreitung verwenden, um zu überprüfen, ob nach dem ersten Klick ein weiterer Klick erfolgt.
Hier ist der Trick :
Verwendung:
BEARBEITEN:
Verwenden Sie, wie unten angegeben, lieber das native
dblclick
Ereignis: http://www.quirksmode.org/dom/events/click.htmlOder die von jQuery bereitgestellte: http://api.jquery.com/dblclick/
quelle
dblclick
Ereignis zu verlassendblclick
ist definitiv der richtige Weg heute. jQuery behandelt auch dieses Ereignis: api.jquery.com/dblclickevent.detail
verfügbar, ist dies der beste Weg, um einen Doppelklick vom Klick-Handler zu erkennen. Siehe diese Antwort .Das Verhalten des
dblclick
Ereignisses wird im Quirksmode erläutert .Die Reihenfolge der Ereignisse für a
dblclick
lautet:Die einzige Ausnahme von dieser Regel ist (natürlich) Internet Explorer mit der benutzerdefinierten Reihenfolge:
Wie Sie sehen können, führt das gleichzeitige Abhören beider Ereignisse auf demselben Element zu zusätzlichen Aufrufen Ihres
click
Handlers.quelle
dblclick
Ich bin mir nicht sicher, ob es überhaupt zuverlässig ist. Wenn ich einmal klicke. Warten Sie ein oder zweidblclick
Sekunden und klicken Sie dann erneut. Beim zweiten Klick wird ein Ereignis angezeigt.event.detail
verfügbar, ist dies der beste Weg, um einen Doppelklick vom Klick-Handler zu erkennen. Siehe diese Antwort .Anstatt mehr Ad-hoc-Status und setTimeout zu verwenden, gibt es eine native Eigenschaft namens
detail
, auf die Sie vomevent
Objekt aus zugreifen können !Moderne Browser und sogar IE-9 unterstützen es :)
Quelle: https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail
quelle
event.detail === 1
wird immer noch ein einzelner Klick (wo ) ausgelöst. Siehe meine Geige oder diesen Kommentar zu diesem Thread .if(evt.detail !== 1) return;
Doppel ablehnen versehentlichen Klicks blockieren den Zugriff auf diese Schaltfläche für Benutzer ohne Maus.Eine einfache Funktion. Es ist keine Abfrage oder ein anderes Framework erforderlich. Übergeben Sie Ihre Funktionen als Parameter
quelle
el.dataset.dblclick
wäre jetzt eine schönere Art, dies zu tun.event.detail
verfügbar, ist dies der beste Weg, um einen Doppelklick vom Klick-Handler zu erkennen. Siehe diese Antwort .Ich befürchte, dass das Verhalten browserabhängig ist:
http://api.jquery.com/dblclick/
Wenn Sie Ihren Code in Firefox ausführen, verhindert die Warnung () im
click()
Handler, dass Sie ein zweites Mal klicken. Wenn Sie eine solche Warnung entfernen, erhalten Sie beide Ereignisse.quelle
event.detail
verfügbar, ist dies der beste Weg, um einen Doppelklick vom Klick-Handler zu erkennen. Siehe diese Antwort .Nun, um zu doppelklicken (zweimal klicken), müssen Sie zuerst einmal klicken. Der
click()
Handler wird bei Ihrem ersten Klick ausgelöst. Da die Warnung angezeigt wird, haben Sie keine Chance, den zweiten Klick auszuführen, um dendblclick()
Handler auszulösen.Ändern Sie Ihre Handler, um etwas anderes als ein zu tun,
alert()
und Sie werden das Verhalten sehen. (Ändern Sie möglicherweise die Hintergrundfarbe des Elements):quelle
Diese Antwort ist mit der Zeit veraltet. Überprüfen Sie die Lösung von @ kyw.
Ich habe eine Lösung erstellt, die von der von @AdrienSchuler veröffentlichten Zusammenfassung inspiriert ist. Verwenden Sie diese Lösung nur, wenn Sie einen einzelnen Klick UND einen Doppelklick an ein Element binden möchten. Ansonsten empfehle ich die Verwendung des Native
click
und derdblclick
Listener.Das sind die Unterschiede:
setTimeout
bis der Klick- oder Doppelklick-Handler fertig istJavascript:
Verwendung:
Unten ist die Verwendung in einer jsfiddle, die jQuery-Schaltfläche ist das Verhalten der akzeptierten Antwort.
jsfiddle
quelle
Eine weitere einfache Vanilla - Lösung auf der Basis der A1rPun Antwort (siehe seine Geige für die jQuery - Lösung, und beide sind in diesem ).
Es scheint, dass, um einen Single-Click-Handler NICHT auszulösen, wenn der Benutzer doppelt klickt, der Single-Click-Handler notwendigerweise nach einer Verzögerung ausgelöst wird ...
quelle
event.detail
verfügbar, ist dies der beste Weg, um einen Doppelklick vom Klick-Handler zu erkennen. Siehe diese Antwort .Hier ist eine Alternative zu Jeums Code für eine beliebige Anzahl von Ereignissen:
Benötigt dies für eine cytoscape.js App.
quelle
this
dem angeklickten Element zuweisen und sie an den Handler übergeben (nebene
oder anstelle davon).Wie kann man zwischen Einzelklicks und Doppelklicks auf ein und dasselbe Element unterscheiden?
Wenn Sie sie nicht benötigen , zu mischen, können Sie sich verlassen
click
unddblclick
und jeder wird gut die Arbeit machen.Beim Mischen tritt ein Problem auf: Ein
dblclick
Ereignis löst tatsächlich auch einclick
Ereignis aus. Sie müssen also feststellen, ob ein einzelner Klick ein "eigenständiger" Einzelklick oder ein Teil eines Doppelklicks ist.Außerdem: Sie sollten nicht beide
click
unddblclick
ein und dasselbe Element verwenden :Nun zu den guten Nachrichten:
Mit der
detail
Eigenschaft des Ereignisses können Sie die Anzahl der mit dem Ereignis verbundenen Klicks ermitteln . Dies macht Doppelklicks innerhalbclick
ziemlich einfach zu erkennen.Das Problem besteht weiterhin darin, einzelne Klicks zu erkennen und festzustellen, ob sie Teil eines Doppelklicks sind oder nicht. Dafür verwenden wir wieder einen Timer und
setTimeout
.Wenn wir alles zusammenfassen, ein Datenattribut verwenden (um eine globale Variable zu vermeiden) und ohne die Klicks selbst zählen zu müssen, erhalten wir:
HTML:
JavaScript:
Demo:
JSfiddle
Hinweise zur Barrierefreiheit und Doppelklickgeschwindigkeit:
Es hat eine Weile gedauert, bis eine zufriedenstellende Lösung gefunden wurde. Ich hoffe, das hilft!
quelle
Verwenden Sie das hervorragende jQuery Sparkle-Plugin. Das Plugin bietet Ihnen die Möglichkeit, den ersten und letzten Klick zu erkennen. Sie können damit zwischen Klick und Doppelklick unterscheiden, indem Sie feststellen, ob auf einen weiteren Klick der erste Klick folgte.
Überprüfen Sie es auf http://balupton.com/sandbox/jquery-sparkle/demo/
quelle
Ich habe ein einfaches jQuery-Plugin geschrieben, mit dem Sie ein benutzerdefiniertes "Singleclick" -Ereignis verwenden können, um einen Einzelklick von einem Doppelklick zu unterscheiden:
https://github.com/omriyariv/jquery-singleclick
quelle
Die moderne richtige Antwort ist eine Mischung aus der akzeptierten Antwort und der Lösung von @kyw. Sie benötigen eine Zeitüberschreitung, um diesen ersten Einzelklick zu verhindern, und die
event.detail
Überprüfung, um den zweiten Klick zu verhindern.quelle
Ich mag es, jquery (und andere 90-140k-Bibliotheken) zu vermeiden, und wie bereits erwähnt, verarbeiten Browser zuerst onclick. Deshalb habe ich Folgendes auf einer von mir erstellten Website getan (in diesem Beispiel wird auch das Abrufen eines angeklickten Speicherorts lokal xy behandelt).
hoffentlich hilft das
quelle
Basierend auf der Antwort von Adrien Schuler (vielen Dank !!!) für Datatables.net und für viele Zwecke ist hier eine Modifikation:
Funktion
Verwenden
quelle
das hat bei mir funktioniert -
Verwendung-
quelle
Veröffentlichen Sie einfach die native HTML-Antwort für den Fall, dass es einfach und HTML sein muss.
Dies hat natürlich native Jquery-Optionen. dh ...
$('#id').attr('ondblclick',function(){...})
oder, wie bereits erwähnt,$('#id').dblclick(function(){...});
quelle
Ich weiß, dass dies alt ist, aber unten ist ein JS-Beispiel eines einfachen Schleifenzählers mit einem einzelnen Timer, um einen einzelnen vs Doppelklick zu bestimmen. Hoffentlich hilft das jemandem.
quelle