Ich behandle das dblclick-Ereignis auf einer Spanne in meiner Web-App. Ein Nebeneffekt ist, dass der Doppelklick Text auf der Seite auswählt. Wie kann ich diese Auswahl verhindern?
Textauswahl nach Doppelklick verhindern
Paolo Bergantino
function clearSelection() {
if(document.selection && document.selection.empty) {
document.selection.empty();
} else if(window.getSelection) {
var sel = window.getSelection();
sel.removeAllRanges();
}
}
Sie können diese Stile auch für alle Nicht-IE-Browser und IE10 auf den Span anwenden:
span.no_selection {
user-select: none; /* standard syntax */
-webkit-user-select: none; /* webkit (safari, chrome) browsers */
-moz-user-select: none; /* mozilla browsers */
-khtml-user-select: none; /* webkit (konqueror) browsers */
-ms-user-select: none; /* IE10+ */
}
-
Gibt es eine Möglichkeit, die Auswahl tatsächlich zu verhindern, anstatt die Auswahl nachträglich zu entfernen? Außerdem könnte Ihre zweite if-Anweisung zur besseren Lesbarkeit innerhalb des else if stehen.
– David
19. Mai 09 um 1:07 Uhr
-
Verwenden Sie am besten das Präfix -webkit- (dies ist das bevorzugte Präfix für Webkit-basierte Browser) zusätzlich zu -moz- (und -khtml-, wenn Sie ein großes Konqueror-Publikum haben).
– Lidlosigkeit
14. Oktober 09 um 20:37 Uhr
-
Dies ist jetzt im IE10 als verfügbar
-ms-user-select: none;
sehen blogs.msdn.com/b/ie/archive/2012/01/11/… @PaoloBergantino– Herzogin
21. Juni 12 um 08:38 Uhr
-
@TimHarper: Was Javascript-Lösungen mit einer Bibliothek angeht, sicher. Ich bin mir nicht wirklich sicher, warum das eine Ablehnung rechtfertigt.
– Paolo Bergantino
30. August 2012 um 18:01 Uhr
-
Es gibt einen Unterschied zwischen dem Deaktivieren der Auswahl bei Doppelklick und dem vollständigen Deaktivieren. Die erste erhöht die Benutzerfreundlichkeit. Der zweite nimmt ab.
– RoboRobok
22. Februar 15 um 22:53 Uhr
Tom
In einfachem Javascript:
element.addEventListener('mousedown', function(e){ e.preventDefault(); }, false);
Oder mit jQuery:
jQuery(element).mousedown(function(e){ e.preventDefault(); });
-
Ja, ich habe dies verwendet, um das gleiche Problem zu lösen, das ich hatte (+1), außer anstatt
return false
Gebrauchtevent.preventDefault()
was keine anderen Handler tötet, die Sie möglicherweise bei mousedown haben.– Simon Osten
24. Februar 12 um 3:16 Uhr
-
Dies bricht Textarea-Elemente auf der Seite 🙁
– John Ktejik
9. Januar 15 um 2:35 Uhr
-
@johnktejik nur wenn
element
ist ein Textfeld, ja.– fregante
14. April 15 um 11:48 Uhr
-
Würde erwarten, dass dieser Event-Handler „dblclick“ zugewiesen wird – aber das funktioniert nicht, was so seltsam ist. Mit „Mousedown“ wird natürlich auch verhindert, dass Text durch Ziehen markiert wird.
– corwin.amber
31. März 16 um 16:48 Uhr
4esn0k
So verhindern Sie die Textauswahl NUR nach einem Doppelklick:
Du könntest benutzen MouseEvent#detail
Eigentum. Für Mousedown- oder Mouseup-Ereignisse ist es 1 plus die aktuelle Klickanzahl.
document.addEventListener('mousedown', function (event) {
if (event.detail > 1) {
event.preventDefault();
// of course, you still do not know what you prevent here...
// You could also check event.ctrlKey/event.shiftKey/event.altKey
// to not prevent something useful.
}
}, false);
Sehen https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail
-
Das ist fantastisch! Funktioniert in Firefox 53.
– Zaroth
28. Juni 17 um 10:50 Uhr
-
Dies sollte die akzeptierte Antwort sein. Alles andere hier verhindert jede Mausauswahl (oder Schlimmeres), anstatt die Frage von OP zu beantworten “Textauswahl nach Doppelklick verhindern“
– Von einem Grue gefressen
12. Januar 19 um 0:28 Uhr
-
Funktioniert auch in Chrome
– KS74
21. September 19 um 20:44 Uhr
-
Benutzen
(event.detail === 2)
um wirklich NUR Doppelklick (und nicht Dreifachklick etc.) zu verhindern– Robin Steward
26. Februar 2020 um 4:17 Uhr
-
@ Catalin, weil es scheint,
dblclick
Brände danachmouseup
und die Auswahl erfolgt danachmousedown
– 4esn0k
17. April 20 um 7:38 Uhr
FWIW, habe ich eingestellt user-select: none
zum übergeordnetes Element dieser untergeordneten Elemente, die ich nicht irgendwie ausgewählt haben möchte, wenn ich irgendwo auf das übergeordnete Element doppelklicke. Und es funktioniert! Coole Sache ist contenteditable="true"
, Textauswahl usw. funktioniert immer noch auf den untergeordneten Elementen!
So wie:
<div style="user-select: none">
<p>haha</p>
<p>haha</p>
<p>haha</p>
<p>haha</p>
</div>
Eine einfache Javascript-Funktion, die den Inhalt eines Seitenelements nicht auswählbar macht:
function makeUnselectable(elem) {
if (typeof(elem) == 'string')
elem = document.getElementById(elem);
if (elem) {
elem.onselectstart = function() { return false; };
elem.style.MozUserSelect = "none";
elem.style.KhtmlUserSelect = "none";
elem.unselectable = "on";
}
}
Für diejenigen, die eine Lösung für suchen Eckig 2+.
Du kannst den … benutzen mousedown
Ausgabe der Tabellenzelle.
<td *ngFor="..."
(mousedown)="onMouseDown($event)"
(dblclick) ="onDblClick($event)">
...
</td>
Und verhindern, wenn die detail > 1
.
public onMouseDown(mouseEvent: MouseEvent) {
// prevent text selection for dbl clicks.
if (mouseEvent.detail > 1) mouseEvent.preventDefault();
}
public onDblClick(mouseEvent: MouseEvent) {
// todo: do what you really want to do ...
}
Der dblclick
Die Ausgabe funktioniert weiterhin wie erwartet.
stackuser83
Wenn Sie versuchen, das Auswählen von Text mit irgendeiner Methode sowie nur mit einem Doppelklick vollständig zu verhindern, können Sie die verwenden user-select: none
CSS-Attribut. Ich habe in Chrome 68 getestet, aber gem https://caniuse.com/#search=user-select es sollte in den anderen aktuellen normalen Benutzerbrowsern funktionieren.
In Chrome 68 wird es verhaltensmäßig von untergeordneten Elementen geerbt und erlaubte nicht, den enthaltenen Text eines Elements auszuwählen, selbst wenn Text ausgewählt wurde, der das Element umgibt und einschließt.
.