2009-05-19 19 views

Répondre

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

Vous pouvez également appliquer ces styles à la portée pour tous les navigateurs non IE et 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

Est-il possible d'empêcher réellement la sélection plutôt que de supprimer la sélection après le fait? En outre, votre seconde instruction if pourrait être à l'intérieur de l'autre si pour une meilleure lisibilité. – David

+0

Le CSS est superbe! Une idée s'il y a quelque chose de similaire disponible pour IE? – David

+0

Désolé pour le bordel avec les accolades; J'ai attrapé ce code d'un autre site sans vérifier. Fixé. Je n'ai pas d'équivalent IE. –

4

ou, mozilla:

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

Sur IE,

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

Cette sollution ne permet pas sélection du texte du tout. – jmav

+1

@jmav Vous devez appliquer les substitutions de fonction sur un élément plus spécifique que 'document.body'. – Cypher

12

Une simple fonction Javascript qui rend le c ontenu à l'intérieur d'une page-élément unselectable:

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 plaine:

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

Ou avec jQuery:

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

Oui, j'ai utilisé ceci pour résoudre le même problème que moi (+1), excepté au lieu de 'return false' utilisé' event.preventDefault() 'qui ne tue pas les autres gestionnaires que vous pourriez avoir sur mousedown. –

+0

Cela ne fonctionne pas dans IE pour moi. –

+0

merci, ça m'a beaucoup aidé! – varnie

1

Pour éviter IE 8 CTRL et la sélection de texte SHIFT cliquez sur l'élément individuel

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

Pour empêcher la sélection de texte sur le document

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

Pour éviter la sélection de texte seulement après un double clic:

Vous pouvez utiliser la propriété MouseEvent#detail. Pour les événements mousedown ou mouseup, il s'agit de 1 plus le nombre de clics actuel.

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

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

+1

C'est génial! Fonctionne dans Firefox 53. – Zaroth

1

fil vieux, mais je suis venu avec une solution que je crois est plus propre car il ne désactive pas tous les même lié à l'objet, et seulement empêcher les sélections de texte aléatoires et indésirables sur la page. C'est simple, et ça marche bien pour moi. Voici un exemple; Je veux éviter le texte de sélection lorsque je clique plusieurs fois sur l'objet avec la classe « flèche droite »:

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

HTH!

0

J'ai eu le même problème. Je l'ai résolu en passant à <a> et ajouter onclick="return false;" (de sorte que le fait de cliquer dessus n'ajoutera aucune nouvelle entrée à l'historique du navigateur).

Questions connexes