13

突出显示此网页上的一些文本,然后基本上单击文档上的任意位置。您的选择将消失。

当用户通过 CSS 或 Javascript 点击特定元素时,有没有办法防止这种行为?

例如:

var element = document.getElementById("foo");
foo.onclick = function(e){
   //some magic here that prevents deselection from occuring
}

或者

foo.style.preventDeselect = "true";

编辑:也许我可以存储选择,然后在“鼠标单击”后恢复选择?有没有办法存储选择,然后重新选择它?

谢谢!

4

6 回答 6

8

onmousedown 中的“return false”和“e.preventDefault()”适用于 FF 和 Safari,但不适用于 IE。据我所知,IE 的唯一解决方案是抛出错误。

这适用于所有浏览器(但在 IE 中会导致错误,因为 preventDefault 不是一种方法):

//clicking the 'test' element will not deselect text.
var test = document.getElementById("test");
test.onmousedown = function(e){
  e = e || window.event;
  e.preventDefault();
}

如果可能的话,我仍然希望在 IE 中无错误地执行此操作

感谢 Paolo Bergantino 的“onmousedown”提示。

于 2009-01-28T04:26:15.543 回答
2

这适用于我在 Firefox 上,虽然没有尝试过 IE。foo.style.preventDeselect = "true";选择文本后尝试单击该行。使用mousedown事件。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
                    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<script>
$(document).ready(function() {
    $('#test').mousedown(function() {
        return false;
    });
});
</script>
<body>

Highlight some text on this webpage, then click basically anywhere on the document. Your selection will disappear.<br><Br>

Is there a way to prevent this behavior when the user clicks on a specific element, either by CSS or Javascript?<br><Br>

E.g.:<br><Br>

var element = document.getElementById("foo");<br>
foo.onclick = function(e){<br>
   //some magic here that prevents deselection from occuring<br>
}<br><Br>

or<br><Br>

<span id='test'>foo.style.preventDeselect = "true";</span><br><Br>

Thanks!<br><Br>

</body>
</html>
于 2009-01-28T03:56:01.313 回答
1

这种行为虽然在现代浏览器中大多是通用的,但特定于浏览器/实现,并且几乎与 CSS 或 Javascript 完全无关。特别要注意的是,Firefox 为整个页面和文本框的内容维护单独的选择状态,而 IE 不这样做。更糟糕的是,考虑具有单独的鼠标和键盘选择界面的文本模式浏览器。

于 2009-01-28T03:54:46.807 回答
1

关于什么

if(e.preventDefault) 
    e.preventDefault();
else
    e.returnValue = false;
于 2009-01-28T05:26:08.323 回答
0

以防万一有人检查出来,我遇到了类似的问题。我需要在通过单击工具栏按钮(与背景图像的跨度)触发的一段选定文本上运行一些 javascript。我通过将跨度更改为具有“javascript:void(0)”href 的锚点来解决我的问题。这阻止了我选择的文本被取消选择。

于 2009-09-14T14:09:18.757 回答
0

我想出如何做到这一点的最好方法是,对于 IE,您需要在“onselectstart”上设置一个侦听器。对于 Mozilla 和其他浏览器,您可以在“mousedown”上进行操作。仅当您不在站点的任何其他部分使用“mousedown”时,这才有效!

片段:YUI 方式:FF 浏览器:

  • YAHOO.util.Event.addListener(window, 'mousedown', function(evt) { YAHOO.util.Event.preventDefault(evt); });

    IE 浏览器:在 IE 中,您不能在窗口上设置此侦听器,因为在 IE 中它不起作用。最好的办法是在你的 body 元素上设置一个类元素,然后引用它,并将侦听器应用于该元素对象。

  • // 按类获取元素并赋值给var bar YAHOO.util.Event.addListener(bar, 'selectstart', function(evt) { YAHOO.util.Event.preventDefault(evt); });

如果您想以简单的方式做到这一点,那就做

  • window.onMouseDown = function() {return false;}

或者对于 IE

  • body.onSelectStart = function() {return false;}

希望这可以帮助。

于 2010-01-21T22:19:36.767 回答