Textauswahl nach Doppelklick verhindern

Lesezeit: 4 Minuten

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

1643908508 400 Textauswahl nach Doppelklick verhindern
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 Gebraucht event.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

Textauswahl nach Doppelklick verhindern
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 danach mouseup und die Auswahl erfolgt danach mousedown

    – 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.

1643908508 670 Textauswahl nach Doppelklick verhindern
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.

.

757940cookie-checkTextauswahl nach Doppelklick verhindern

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy