在Internet Explorer中使所有文本除<input />之外不可选择?

时间:2011-11-16 00:05:03

标签: html css javascript internet-explorer

我有一个网站,我想禁止用户选择输入区域以外的内容。我目前有一些CSS来禁用用户选择:

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

但是,这不包括Internet Explorer;因此,我需要实现一些JavaScript:

<body onselectstart="return false;">

通过CSS和JavaScript,我可以在所有流行的浏览器中使所有内容无法选择。但是,这段代码也使区域无法选择,这是可用性差的主要原因。我使用CSS来输入输入区域:

-webkit-user-select: text;
-khtml-user-select: text;
-moz-user-select: text;
-o-user-select: text; 
user-select: text;

..正如您可能预料的那样,这不包括Internet Explorer,因为我使用JavaScript来禁止所有内容都可以选择。

除了输入区域,我该怎样做才能使所有内容无法选择?

3 个答案:

答案 0 :(得分:2)

试试这个:oncontextmenu =“return false;”

将它放在你的身体标签中,然后使用类似的东西:

e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();

在javascript函数中为您想要选择的输入项。这应该会阻止触发body标签的事件的传播。

答案 1 :(得分:2)

由于事件冒泡到身体并且不是从那里发起的,我认为你可以检查实际目标节点的节点名称,并避免为某些节点上发生的事件返回false:

<body onselectstart="if ((event.target || event.srcElement).nodeName !== 'INPUT') return false;">

答案 2 :(得分:0)

您可以将专有IE属性unselectable="on"添加到您想在IE中无法选择的任何元素中:

<p unselectable="on">I don't want IE users to easily select this text 
  for some reason.</p>

有关更详细的说明,请参阅Making things unselectable in IE

如果从javascript执行此操作,请务必使用el.setAttribute("unselectable","on")。只使用el.unselectable="on"将无效。