2010-11-30 56 views
1

在Firefox看起来很好,Chrome和IE的文本仍然可以选择,有没有办法解决这个问题?代码取自另一个问题(我现在找不到),所以它可能已过时?Javascript非选择性文本在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")); 
+2

为什么你想这样做?即使让它起作用,再次使文本可选也与禁用javascipt或查看源代码一样简单。只有真正阻止选择的方式是提供图像,这会导致各种可访问性问题,并隐藏搜索引擎中的文本。 – tdammers 2010-11-30 10:05:09

+1

我知道有人会问这个问题,我完全意识到这些问题,但这不是为了保护数据,它只是为了提高我正在制作的Web应用程序的性能,所以当用户拖放元素时其中包含的文本不会开始被选中,并使应用程序行为奇怪。 – 2010-11-30 10:08:31

+0

我最近有一个像这样的问题,并解决了它与jQuery升级:) – sje397 2010-11-30 10:17:29

回答

1

对于webkit的使用khtmlUserSelect代替MozUserSelect

在歌剧和MSIE,您可以设置不可选择的属性为“开”

至于壁虎/ 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> 

注意:不可选项不会传递子元素,因此如果除了targetNode中的textNodes以外还有其他内容,则需要为MSIE/opera准备好的解决方法。

0

与Firefox中的MozUserSelect样式类似,您可以使用-webkit-user-select: none用于基于Webkit的浏览器(如Safari和Chrome)。

我认为你可以在Opera中使用-o-user-select: none。但我没有测试过它。

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

0

对于Wekbit(如Chrome和Safari),你可以添加:

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

对于IE浏览器,使用 '不可选择':

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

参考:http://help.dottoro.com/ljrlukea.php

1

以上所有的例子都太复杂了..基于浏览器版本。 我得到了simle解决方案...适用于所有浏览器!

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