Risposte:
function clearSelection() {
if(document.selection && document.selection.empty) {
document.selection.empty();
} else if(window.getSelection) {
var sel = window.getSelection();
sel.removeAllRanges();
}
}
Puoi anche applicare questi stili all'intervallo per tutti i browser non IE e IE10:
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+ */
}
-ms-user-select: none;
vedi blogs.msdn.com/b/ie/archive/2012/01/11/… @PaoloBergantino
In javascript semplice:
element.addEventListener('mousedown', function(e){ e.preventDefault(); }, false);
O con jQuery:
jQuery(element).mousedown(function(e){ e.preventDefault(); });
return false
usato event.preventDefault()
che non uccide altri gestori che potresti avere su Mousedown.
element
è una textarea, sì.
Per impedire la selezione del testo SOLO dopo un doppio clic:
Puoi usare la MouseEvent#detail
proprietà. Per gli eventi di mouse o mouseup, è 1 più il conteggio dei clic corrente.
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);
Vedi https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail
(event.detail === 2)
per impedire davvero SOLO doppio clic (e non triplo clic ecc.)
FWIW, ho impostato user-select: none
l' elemento genitore di quegli elementi figlio che non voglio in qualche modo selezionato quando faccio doppio clic in un punto qualsiasi dell'elemento genitore. E funziona! La cosa interessante è che la contenteditable="true"
selezione del testo e così via funziona ancora sugli elementi figlio!
Quindi come:
<div style="user-select: none">
<p>haha</p>
<p>haha</p>
<p>haha</p>
<p>haha</p>
</div>
style="user-select: note"
ovunque risolto il problema che stavo cercando di risolvere :)
Una semplice funzione Javascript che rende il contenuto all'interno di un elemento di pagina non selezionabile:
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";
}
}
Per chi cerca una soluzione per Angular 2+ .
È possibile utilizzare l' mousedown
output della cella della tabella.
<td *ngFor="..."
(mousedown)="onMouseDown($event)"
(dblclick) ="onDblClick($event)">
...
</td>
E prevenire se il 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 ...
}
L' dblclick
output continua a funzionare come previsto.
oppure, su Mozilla:
document.body.onselectstart = function() { return false; } // Or any html object
Su IE,
document.body.onmousedown = function() { return false; } // valid for any html object as well
document.body
.
Vecchio thread, ma ho trovato una soluzione che ritengo più pulita in quanto non disabilita tutti i limiti pari all'oggetto e impedisce solo selezioni di testo casuali e indesiderate sulla pagina. È semplice e funziona bene per me. Ecco un esempio; Voglio impedire la selezione del testo quando faccio clic più volte sull'oggetto con la classe "freccia-destra":
$(".arrow-right").hover(function(){$('body').css({userSelect: "none"});}, function(){$('body').css({userSelect: "auto"});});
HTH!
Se si sta tentando di impedire completamente la selezione del testo con qualsiasi metodo e solo con un doppio clic, è possibile utilizzare l' user-select: none
attributo css. Ho testato in Chrome 68, ma secondo https://caniuse.com/#search=user-select dovrebbe funzionare negli altri browser degli utenti normali correnti.
Comportamentalmente, in Chrome 68 è ereditato da elementi figlio e non ha permesso di selezionare il testo contenuto di un elemento anche se è stato selezionato il testo circostante e incluso l'elemento.
Per impedire IE 8 CTRL e MAIUSC, fare clic sulla selezione del testo sul singolo elemento
var obj = document.createElement("DIV");
obj.onselectstart = function(){
return false;
}
Per impedire la selezione del testo sul documento
window.onload = function(){
document.onselectstart = function(){
return false;
}
}