Sie möchten vielleicht, dass ein Link eine spezielle Aktion ausführt, wenn er doppelt angeklickt wird, was die Standardaktion des Links (Aufruf einer anderen Seite) verhindert. Also
Doppelklick: führt eine spezielle Aktion aus, normale Klickereignisse werden gar nicht ausgeführt
Klick: funktioniert normal
Sie müssen eine sehr kleine Verzögerung beim Auslösen der normalen Klickaktion haben, die Sie abbrechen, wenn das Doppelklickereignis eintritt.
function doClickAction() {
$("#click h2").append("•");
}
function doDoubleClickAction() {
$("#double-click h2").append("•");
}
var timer = 0;
var delay = 200;
var prevent = false;
$("#target")
.on("click", function() {
timer = setTimeout(function() {
if (!prevent) {
doClickAction();
}
prevent = false;
}, delay);
})
.on("dblclick", function() {
clearTimeout(timer);
prevent = true;
doDoubleClickAction();
});
Check out this Pen!
Versuchen Sie, zu klicken, dann nochmal zu klicken und dann doppelt zu klicken; Ihr Skript schlägt fehl
aber ich denke, es funktioniert gut!
verwenden Sie ein Array für setTimeout
Danke, es ist sehr hilfreich für mich.
im Moment wählt der Doppelklick den Text automatisch aus, ein normaler Klick ist zugewiesen?
Dieses Skript schlägt offensichtlich fehl, wenn die Doppelklick-Schwelle Ihres Betriebssystems höher als 200 ms ist (und meistens ist sie das). Klicken Sie einfach noch einmal nach dem Erscheinen des „Klick“-Punktes – höchstwahrscheinlich wird der „Doppelklick“-Punkt hinzugefügt, da Ihr Skript den Timer bereits beendet hat, das Betriebssystem aber natürlich immer noch den zweiten Klick als Doppelklick betrachtet, aber nichts zu abbrechen hat.
Die richtige Lösung ist, einen einzelnen Klick-Ereignishandler zu haben und zu prüfen, ob ein Timer läuft – wenn ja, brechen Sie ihn ab und führen Sie die Doppelklick-Aktion aus. Der abgeschlossene Timer selbst führt die Einzelklick-Aktionen aus.
könnten Sie vielleicht ein Codebeispiel für Ihre Lösung geben
Dies funktioniert in Chrome gut, aber nicht in IE. Gibt es eine Umgehungslösung für IE??
VIELEN DANK!!!! Ich hatte jahrelang eine App, die in Chrome nicht funktionierte, und das hat mir endlich geholfen, sie zu beheben :)
Obwohl es etwas schlampig und sperrig aussieht, ist es eine brillante Lösung.
Hier ist eine Lösung, um Doppelklicks zu ermöglichen, aber ohne die dblclick-Methode von JQuery zu benötigen. Sie verwendet nur click.
Die Zeile „var sel = this;“ ist nicht notwendig. War ein Überbleibsel aus dem Code.
Bei mir funktioniert es nicht, weil es wie folgt ausgeführt wird
Zwei schnelle Klicks (als Doppelklick beabsichtigt) => der Klick-Ereignishandler wird zweimal ausgeführt, dann wird das Doppelklick-Ereignis einmal ausgeführt. Daher wird setTimeout im Klick-Ereignishandler zweimal ausgeführt, sodass 'timer' auf das zweite Timeout-Objekt verweist. Dieses zweite Objekt wird durch das Doppelklick-Ereignis gelöscht, aber das erste Timeout-Objekt wird nicht gelöscht. Infolgedessen wird der Doppelklick einmal ausgeführt, dann der erste Einzelklick einmal ausgeführt. Als Lösung mache ich im Einzelklick-Ereignishandler, bevor ich timer = setTimeout(...) erstelle, ein clearTimeout(timer). Dann funktioniert es wie beabsichtigt.
Sie benötigen eine Mischung aus Timeout- und event.detail-Prüfungen, damit es funktioniert.
Sehen Sie sich meine Antwort auf Stackoverflow an – https://stackoverflow.com/a/60177326/670839
Es ist eine gute Idee, aber wenn die Zeit zwischen 2 Klicks im Bereich von 201 ms bis 500 ms liegt, werden beide Aktionen ausgelöst, da die Zeitüberschreitung zwischen 2 Klicks, um ein dbclick-Ereignis auszulösen, 500 ms beträgt (Standard in Windows OS), daher funktioniert diese Lösung nicht in allen Fällen gut.
Meine Lösung zur Behebung dieses Fehlers