Убрать блокировку выделения текста

243
30 ноября 2017, 03:48

Здравствуйте.
Подскажите как обойти блокировку данного типа:

function preventSelection(element){
  var preventSelection = false;
  function addHandler(element, event, handler){
    if (element.attachEvent) 
      element.attachEvent('on' + event, handler);
    else 
      if (element.addEventListener) 
        element.addEventListener(event, handler, false);
  }
  function removeSelection(){
    if (window.getSelection) { window.getSelection().removeAllRanges(); }
    else if (document.selection && document.selection.clear)
      document.selection.clear();
  }
  function killCtrlA(event){
    var event = event || window.event;
    var sender = event.target || event.srcElement;
    if (sender.tagName.match(/INPUT|TEXTAREA/i))
      return;
    var key = event.keyCode || event.which;
    if (event.ctrlKey && key == 'A'.charCodeAt(0))  // 'A'.charCodeAt(0) можно заменить на 65
    {
      removeSelection();
      if (event.preventDefault) 
        event.preventDefault();
      else
        event.returnValue = false;
    }
  }
  // не даем выделять текст мышкой
  addHandler(element, 'mousemove', function(){
    if(preventSelection)
      removeSelection();
  });
  addHandler(element, 'mousedown', function(event){
    var event = event || window.event;
    var sender = event.target || event.srcElement;
    preventSelection = !sender.tagName.match(/INPUT|TEXTAREA/i);
  });
  // борем dblclick
  // если вешать функцию не на событие dblclick, можно избежать
  // временное выделение текста в некоторых браузерах
  addHandler(element, 'mouseup', function(){
    if (preventSelection)
      removeSelection();
    preventSelection = false;
  });
  // борем ctrl+A
  // скорей всего это и не надо, к тому же есть подозрение
  // что в случае все же такой необходимости функцию нужно 
  // вешать один раз и на document, а не на элемент
  addHandler(element, 'keydown', killCtrlA);
  addHandler(element, 'keyup', killCtrlA);
}

Хотел написать UserScript, но не знаю как :(
Если поможете написать скрипт то буду примного благодарен.

Answer 1

Это статья (на хабре) 2007 года!!!

Я отключаю возможность выделения текста так (через css):

user-select:                none;
    -khtml-user-select:     none;
    -moz-user-select:       none;
    -ms-user-select:        none;
    -o-user-select:         none;
    -webkit-user-select:    none;

Вот ссылка на сайт, где ты можешь посмотреть совместимость с современными (и не очень) браузерами

https://caniuse.com/#search=user-select

не поддерживается только Opera Mini (вообще не знаю, что это такое - оно css почти не поддерживает)

P.S.

создай класс

.noselect {
    user-select:                none;
        -khtml-user-select:     none;
        -moz-user-select:       none;
        -ms-user-select:        none;
        -o-user-select:         none;
        -webkit-user-select:    none;
}

и добавляй его динамически к элементам, для которых хочешь отключить выделение текста, например

$(myelement).addClass('noselect');
READ ALSO
Как сделать биржевые котировки на сайте?

Как сделать биржевые котировки на сайте?

Добрый день! Передо мной стала такая задачаНужно сделать на сайте окно с бегущей строкой биржевых котировок

210
Переход к блоку при листинге

Переход к блоку при листинге

ЗдравствуйтеЕсть обычная разметка сайта, с обычными блоками

196
Фильтр с разделением результатов на jquery/js

Фильтр с разделением результатов на jquery/js

Доброго времени суток, сообщество! Есть вот такой вот фильтр: http://jsfiddlenet/xvs9jL1c/ Но, к сожалению, не совсем устраивает своим функционалом и у меня...

168
Обратный отсчёт времени на javascript

Обратный отсчёт времени на javascript

Мне надо сделать таймер обратного отсчета до 31 декабряБолее менее понимаю, каковым должен быть алгоритм:

203