Javascript не выбираемый текст не работает в Chrome / IE - PullRequest
1 голос
/ 30 ноября 2010

В Firefox кажется нормально, Chrome и IE текст по-прежнему выбирается, есть ли способ обойти это? Код был взят из другого вопроса (который я не могу найти прямо сейчас), поэтому он может быть устаревшим?

// Prevent selection
function disableSelection(target) {
    if (typeof target.onselectstart != "undefined") //IE route
        target.onselectstart = function() { return false }
    else if (typeof target.style.MozUserSelect != "undefined") //Firefox route
        target.style.MozUserSelect = "none"
    else //All other route (ie: Opera)
        target.onmousedown = function() { return false }
}

Используется в коде как:

disableSelection(document.getElementById("gBar"));

Ответы [ 4 ]

1 голос
/ 25 февраля 2014

все приведенные выше примеры слишком сложны .. в зависимости от версии браузера. Я получил простое решение ... работает для всех браузеров!

// you can select here which html element you allow to be selected
var ExcludeElems = ["INPUT","SELECT","OPTION"]



function disableSelection (target) {
   // For all browswers code will work .....
   target.onmousedown = function (e) 
  {
     var i;
     var e = e ? e : window.event;

     if (e) 
      for (i=0; i<ExcludeElems.length;i++)
        if (e.target.nodeName == ExcludeElems[i] ) 
           return true;
     return false;
  }

если вам нужно, вы можете сделать эту функцию более сложной. Используйте этот код для любого элемента контейнера ...

disableSelection (document) 
//disableSelection (document.body) 
//disableSelection (divName) ....
1 голос
/ 30 ноября 2010

Для веб-набора используйте khtmlUserSelect вместо MozUserSelect.

В опере и MSIE вы можете установить для свойства unselectable значение "On"

Поскольку оба стиля относятся к gecko /webkit - это CSS, вы можете использовать класс для его применения:

<script type="text/javascript">
<!--
function disableSelection(target)
{
  target.className='unselectable';
  target.setAttribute('unselectable','on');
}
//-->
</script>
<style type="text/css">
<!--
.unselectable{
-moz-user-select:none;
-khtml-user-select: none;
}
-->
</style>

Примечание: unselectable не передаст дочерние элементы, поэтому если у вас есть что-то кроме textNodes внутри target, вам нужно обойти этоуже есть там для MSIE / опера.

0 голосов
/ 30 ноября 2010

Для Wekbit (например, Chrome и Safari) вы можете добавить:

else if (typeof target.style.webkitUserSelect != "undefined") // Webkit route
    target.style.webkitUserSelect = "none";

Для IE используйте 'unselectable':

else if (typeof target.unselectable != "undefined") // IE route
    target.unselectable = true;

Ссылка: http://help.dottoro.com/ljrlukea.php

0 голосов
/ 30 ноября 2010

Как и стиль MozUserSelect в Firefox, вы можете использовать -webkit-user-select: none для браузера на основе Webkit (например, Safari и Chrome).

Я думаю, что вы можете использовать -o-user-select: none в Opera. Но я не проверял это.

// Prevent selection
function disableSelection(target) {
    if (typeof target.onselectstart != "undefined") //IE route
        target.onselectstart = function() { return false }
    else if (typeof target.style.userSelect != "undefined") //Some day in the future?
        target.style.userSelect = "none"
    else if (typeof target.style.webkitUserSelect != "undefined") //Webkit route
        target.style.webkitUserSelect = "none"
    else if (typeof target.style.MozUserSelect != "undefined") //Firefox route
        target.style.MozUserSelect = "none"
    else //All other route (ie: Opera)
        target.onmousedown = function() { return false }
}

Для IE, может быть, это может помочь вам: http://msdn.microsoft.com/en-us/library/ms534706(VS.85).aspx

...