2009-08-23 16 views
39

J'ai une table et je permets aux utilisateurs de sélectionner plusieurs lignes. Tout cela est géré à l'aide d'événements jQuery et de CSS pour indiquer visuellement que la ligne est 'sélectionnée'. Lorsque l'utilisateur appuie sur Maj, il est possible de sélectionner plusieurs lignes. Parfois, le texte est mis en surbrillance. Est-il un moyen d'empêcher cela?Empêcher la surbrillance du tableau de texte

+0

duplication possible de [Règle CSS pour désactiver la surbrillance de la sélection de texte] (http://stackoverflow.com/questions/826782/css-rule-to- disable-text-selection-highlighting) – Dan

Répondre

71

Il y a une propriété CSS3 pour cela.

#yourTable { 
    -webkit-touch-callout: none; 
    -webkit-user-select: none; 
    -khtml-user-select: none; 
    -moz-user-select: none; 
    -ms-user-select: none; 
    user-select: none; 
} 
+20

Dommage qu'Internet Explorer ne s'en soucie pas. Testé en 6-8. –

+1

@NathanTaylor Après le googling, vous trouverez un doublon où cela est déjà résolu: http://stackoverflow.com/questions/826782/css-rule-to-disable-text-selection-highlighting – Dan

+0

'Validation (CSS 3.0):" moz-none "n'est pas une valeur valide pour la propriété" -moz-user-select ". Et en effet, cela n'a pas fonctionné pour Firefox tant que je n'ai pas changé' moz-none' en 'none'. – Nolonar

1

Vous pouvez essayer avec la fonction focus() sur le texte sélectionné - la sélection disparaît.

$('#someEl').focus(); 
30

Si vous voulez avoir le contrôle lorsque vos utilisateurs peuvent choisir ou non partie de votre site, vous pouvez utiliser ce little jQuery plugin.

jQuery.fn.extend({ 
     disableSelection : function() { 
       return this.each(function() { 
         this.onselectstart = function() { return false; }; 
         this.unselectable = "on"; 
         jQuery(this).css('user-select', 'none'); 
         jQuery(this).css('-o-user-select', 'none'); 
         jQuery(this).css('-moz-user-select', 'none'); 
         jQuery(this).css('-khtml-user-select', 'none'); 
         jQuery(this).css('-webkit-user-select', 'none'); 
       }); 
     } 
}); 

et l'utiliser comme:

// disable selection on #theDiv object 
$('#theDiv').disableSelection(); 

Sinon, vous pouvez simplement utiliser ces css attributs dans votre fichier css:

#theDiv 
{ 
    -webkit-user-select: none; 
    -khtml-user-select: none; 
    -moz-user-select: none; 
    -ms-user-select: none; 
    user-select: none; 
} 
3

Je supprime simplement la sélection effectuée à l'aide de la touche Maj. Cela pourrait montrer un peu scintillement si

if (event.shiftKey) { 
    window.getSelection().removeAllRanges() 
} 
13

Juste une note sur la réponse de Cleiton ci-dessus - l'exemple de code semble bien fonctionner, mais pour être un bon citoyen dans le monde jQuery, vous devez retourner le jQuery objet à la fin de la fonction afin qu'il soit chainable - simple ajout d'une ligne fixe que jusqu'à:

jQuery.fn.extend({ 
    disableSelection : function() { 
      this.each(function() { 
        this.onselectstart = function() { return false; }; 
        this.unselectable = "on"; 
        jQuery(this).css('-moz-user-select', 'none'); 
      }); 
      return this; 
    } 
}); 

Cheers, espérons que cela est utile.

+2

Il le fait avec "return this.each (function() {..." – frontendbeauty

1

Si vous avez Jquery UI sur vos pages, il suffit d'utiliser

$("element-selector").disableSelection(); 
+1

Ceci est non documenté, mais devrait fonctionner si vous avez jQuery UI core –

+0

bonne chose à propos de cette solution est que c'est aussi applicable à IE et répliquer la fonctionnalité de – sksallaj

+1

Notez que disableSelection() est obsolète dans jQuery UI 1.9 – mar10

0
::-moz-selection { /* Code for Firefox */ 
    color: black; 
    background: none; 
} 

::selection { 
    color: black; 
    background: none; 
} 

de http://www.w3schools.com/cssref/sel_selection.asp
en fait de la section essayer-il, après avoir changé les valeurs.
Notez cependant que le curseur est toujours en forme de 'I' ...

+0

Remarque: Le pseudo-élément :: selection a été rédigé pour CSS Selectors Level 3, mais supprimé avant le statut Recommendation. Pour le moment, le pseudo-élément :: selection ne fait partie d'aucune spécification. (Cependant, il peut être rajouté aux futures spécifications CSS.) – luk2302

Questions connexes