Отключить выделение текста двойным щелчком мыши в jQuery

У меня есть переключатель jQuery. Он отлично работает.

   <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":""});
          }
        );

Проблема заключается в том, что когда я делаю быстрый щелчок, он выделяет текст в нем. Есть ли способ остановить выделение текста?

Ответы

Ответ 1

Я пишу на iPhone, находясь далеко от стола, но быстрый Google поднял эту страницу: отключить выбор текста с помощью jQuery.


Отредактировано в ответ на комментарий "мертвой ссылки" (от @Herb Caudill). Хотя исходная ссылка, действительно, мертва, по-видимому, связана с реструктуризацией сайта (а не с удалением), и новое место для статьи можно найти здесь: http://chris-barr.com/index.php/entry/disable_text_selection_with_jquery/

И код, приведенный в этой статье, воспроизводится ниже:

$(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'
});

фрагмент jQuery, написанный Chris Barr, chris-barr.com, доступ к которому осуществляется в пятницу, 21 st от января 2011 года.

Ответ 2

Если вы используете jQuery UI, вы можете отключить выбор текста так же просто:

$("body").disableSelection();

Ответ 3

Я решил это, используя нестандартное ключевое слово CSS user-select:

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

Ответ 4

//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);

Источник

Ответ 5

У меня была такая же проблема, и это сработало для меня:

li.noselection::selection {
    background-color: transparent;
}

Я тестировал его на Chrome, Firefox, EDGE и IE с 7 до 10.

PS Это только отключает "визуальный эффект", текст по-прежнему выделяется. Я надеюсь, что именно поэтому за это проголосовали, потому что, если ваша проблема только эстетическая, это решение работает на 100%.

Ответ 6

Для работы с версией jQuery выше 1.9.x

HTML

Разметка html, как показано выше:

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

JS

Используйте функцию preventDefault() вместо return false, которая не убивает других обработчиков, которые могут быть

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

Пример: jsFiddle

Ответ 7

window.getSelection().empty()

отлично работает в Chrome, хотя и с быстрой вспышкой выделения, что является уродливым.

Ответ 8

$( 'selector' ).on( 'selectstart', 'selector', function( ) { 
  return false; 
}).css( 'MozUserSelect','none' ).mousedown( function( ) {
  return false;
}); 

замените селектор на свой собственный - этот код отлично работает во всех браузерах. Использование .on() для элементов, динамически вставленных в DOM

Ответ 9

document.onselectstart = function() { return false; }
document.onmousedown = function() { return false; }