2009-05-19 18 views

Respuesta

275
function clearSelection() { 
    if(document.selection && document.selection.empty) { 
     document.selection.empty(); 
    } else if(window.getSelection) { 
     var sel = window.getSelection(); 
     sel.removeAllRanges(); 
    } 
} 

También puede aplicar estos estilos al rango de medición para todos los navegadores no-IE y IE10:

span.no_selection { 
    -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+ */ 
} 
+29

¿Hay alguna manera de evitar la selección en lugar de eliminar la selección después del hecho? Además, su segunda declaración if podría estar dentro de la otra si para una mejor legibilidad. – David

+0

¡El CSS se ve genial! ¿Alguna idea de si hay algo similar disponible para IE? – David

+0

Disculpa por el desastre con los aparatos ortopédicos; Agarré ese código de otro sitio sin verificarlo. Fijo. No hay equivalente de IE, me temo. –

4

o, en Mozilla:

document.body.onselectstart = function() { return false; } // Or any html object 

En IE,

document.body.onmousedown = function() { return false; } // valid for any html object as well 
+4

Este sollution no permite seleccionando texto en absoluto. – jmav

+1

@jmav Debería aplicar las anulaciones de función en un elemento más específico que 'document.body'. – Cypher

12

Una función de Javascript simple que hace que la c ontenido dentro de una página de elementos no seleccionable:

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"; 
    } 
} 
92

en JavaScript claro:

element.addEventListener('mousedown', function(e){ e.preventDefault(); }, false); 

O con jQuery:

jQuery(element).mousedown(function(e){ e.preventDefault(); }); 
+22

Sí, utilicé esto para resolver el mismo problema que estaba teniendo (+1), excepto que en lugar de 'return false' usé' event.preventDefault() 'que no mata a ningún otro manejador que pueda tener en el mousedown. –

+0

Esto no funciona en IE para mí. –

+0

gracias, me ayudó mucho! – varnie

1

Para evitar que el IE 8 CTRL y SHIFT clic selección de texto en el elemento individual

var obj = document.createElement("DIV"); 
obj.onselectstart = function(){ 
    return false; 
} 

para evitar la selección de texto en el documento

window.onload = function(){ 
    document.onselectstart = function(){ 
    return false; 
    } 
} 
8

Para evitar la selección de texto sólo después de un doble clic:

Usted podría utilizar MouseEvent#detail propiedad. Para eventos mousedown o mouseup, es 1 más el conteo de clics actual.

document.addEventListener('mousedown', function (event) { 
    if (event.detail > 1) { 
    event.preventDefault(); 
    } 
}, false); 

Ver https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail

+1

¡Esto es increíble! Funciona en Firefox 53. – Zaroth

1

hilo viejo, pero se me ocurrió una solución que creo que es más limpio ya que no desactiva cada vinculado ni siquiera al objeto, y sólo a prevenir las selecciones de texto al azar y no deseados en el página. Es sencillo, y funciona bien para mí. Aquí hay un ejemplo; Quiero evitar que el texto-selección al hacer clic varias veces en el objeto con la clase "flecha derecha":

$(".arrow-right").hover(function(){$('body').css({userSelect: "none"});}, function(){$('body').css({userSelect: "auto"});}); 

HTH!

0

Tuve el mismo problema. Lo resolví cambiando a <a> y agregué onclick="return false;" (de modo que al hacer clic no se agregará una nueva entrada al historial del navegador).

Cuestiones relacionadas