53 votes

Désactiver la mise en évidence du texte en cas de double-clic en jQuery

J'ai cette bascule jQuery. Il fonctionne bien.

   <ul>
    <li>Go to the store</li>
    <li>Pick up dinner</li>
    <li>Debug crash</li>
    <li>Take a jog</li>
  </ul>

        $("li").toggle(
          function () {
            $(this).css({"list-style-type":"disc", "color":"blue"});
          },
          function () {
            $(this).css({"list-style-type":"disc", "color":"red"});
          },
          function () {
            $(this).css({"list-style-type":"", "color":""});
          }
        );

Le problème est que lorsque je fais un clic rapide, le texte est mis en évidence. Existe-t-il un moyen d'empêcher le texte d'être mis en évidence ?

0 votes

Qu'entendez-vous par "mis en évidence" ? Le texte est-il sélectionné dans l'élément de la liste si vous cliquez pendant le basculement ?

0 votes

Essayez simplement de double-cliquer sur un texte... Vous verrez ce que je veux dire... le texte sera sélectionné (surligné)... Je ne veux pas que le texte soit sélectionné...

0 votes

54voto

David Thomas Points 111253

J'écris sur mon iPhone, loin de mon bureau, mais une recherche rapide sur Google m'a permis de trouver cette page : désactiver la sélection de texte avec jQuery .


Modifié en réponse au commentaire sur le "lien mort" (de @Herb Caudill). Si le lien original est effectivement mort, il semble que cela soit dû à une restructuration du site (plutôt qu'à sa suppression) et le nouvel emplacement de l'article se trouve ici : http://chris-barr.com/index.php/entry/disable_text_selection_with_jquery/

Et le code fourni dans cet article est reproduit ci-dessous :

$(function(){
    $.extend($.fn.disableTextSelect = function() {
        return this.each(function(){
            if($.browser.mozilla){//Firefox
                $(this).css('MozUserSelect','none');
            }else if($.browser.msie){//IE
                $(this).bind('selectstart',function(){return false;});
            }else{//Opera, etc.
                $(this).mousedown(function(){return false;});
            }
        });
    });
    $('.noSelect').disableTextSelect();//No text selection on elements with a class of 'noSelect'
});

Un extrait de jQuery écrit par Chris Barr, de chris-barr.com consulté le vendredi 21 st de janvier 2011.

1 votes

Ce lien est cassé, quelqu'un peut-il nous éclairer sur la solution ?

0 votes

@Herb Caudill, veuillez voir l'édition (après le hr ) qui renvoie au nouvel emplacement du même article, et inclut également le jQuery correspondant ici (avec autant de citations que possible, si @Chris Barr veut contester son inclusion ici, je le retirerai bien sûr de la réponse).

7 votes

$.browser est déprécié, et se lier à un événement non supporté par le navigateur ne fait aucun mal de toute façon. Je recommande donc de lier simplement "selectstart", "click" et "mousedown" à une fonction retournant false. Cela fonctionne également avec Mozilla, la propriété CSS MozUserSelect n'est pas nécessaire.

37voto

Sjoerd Points 34671

J'ai résolu ce problème en utilisant le mot clé CSS non standard sélection par l'utilisateur :

.unselectable {
  -moz-user-select: none;
  -webkit-user-select: none;
  -ms-user-select: none;
}

0 votes

Aucune des solutions ne fonctionne pour moi, sauf votre réponse, merci.

0 votes

C'est la réponse la plus simple et la meilleure, à mon avis. Notez que la version standardisée devrait également être utilisée : user-select: none;

1 votes

Cela empêche toute sélection, et pas seulement la sélection par double-clic.

36voto

VisioN Points 62518

Si vous utilisez jQuery UI, vous pouvez désactiver la sélection de texte aussi simplement que cela :

$("body").disableSelection();

6 votes

Il faut aimer jQuery UI :) merci !

3 votes

Simple et efficace. Merci ! L'approche de détection du navigateur a été supprimée dans jQuery 1.9.

10voto

Alex Bagnolini Points 7403
//function to be reused later
function clearSelection() {
  var sel ;
  if(document.selection && document.selection.empty){
    document.selection.empty() ;
  } else if(window.getSelection) {
    sel=window.getSelection();
    if(sel && sel.removeAllRanges)
      sel.removeAllRanges() ;
  }
}

$('p').click(clearSelection);

Fuente

0 votes

Merci... cela a fait l'affaire... mais la suggestion de ricebowl est meilleure... Je vais juste vous donner +1.

5voto

Lahmizzar Points 95

Pour fonctionner avec une version de jQuery supérieure à 1.9.x

HTML

Le balisage html comme indiqué ci-dessus :

<ul>
    <li>Go to the store</li>
    <li>Pick up dinner</li>
    <li>Debug crash</li>
    <li>Take a jog</li>
</ul>

JS

Utilisez preventDefault() au lieu de retournez à la case départ ce qui ne tue pas les autres gestionnaires que vous pourriez avoir.

$('li').on('selectstart', function (event) {
    event.preventDefault();
});

Exemple : jsFiddle

1 votes

Cela permet d'éviter tout sélection de texte, comme cliquer/glisser pour mettre en surbrillance

0 votes

Cela empêche uniquement la sélection de texte pour ul > li texte. Veuillez jeter un coup d'œil au test en ligne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X