使用 CSS 或其他非 JS 方法模仿“onselectstart=return false”?[复制]

Imitate "onselectstart=return false" using CSS or other non-JS approach? [duplicate]

提问人:Pekka 提问时间:10/28/2009 最后编辑:Jason BerkanPekka 更新时间:11/5/2009 访问量:17507

问:

我创建了一个按钮 CSS 类,该类使用具有不同位置的背景图像在正常、鼠标悬停和单击状态下显示不同的图像。 完全破坏视觉效果的一件事是,如果我反复单击这样的链接并将鼠标移动一个像素,链接文本就会被选中。

有没有办法达到效果

onselectstart = "return false;"

而不必为每个按钮指定?基于CSS的解决方案将是完美的,但我想不出一个。有什么想法吗?

一种方法是使用 prototype 或 JQuery 遍历每个“button”元素,并手动设置 onselectstart 事件。但是,在非绝对必要的情况下,我对 Javascript 过敏,并且不胜感激任何非 JS 的想法。

编辑:我找到了Mozilla浏览器的解决方案:

 -moz-user-select:none;
JavaScript HTML CSS

评论


答:

8赞 bobince 10/28/2009 #1

完全破坏视觉效果的一件事是,如果我反复单击这样的链接并将鼠标移动一个像素,链接文本就会被选中。

它真的是一个链接吗?通常,您不能选择链接文本。

如果您使用 eg.一个 div 作为虚假链接,也许你应该使用一个链接来代替(如果它有一个真正的 href),或者一个输入按钮,如果它只是为了脚本(尽管这需要一些样式来失去浏览器默认样式,这有点痛苦)。

否则,Safari/Chrome/Konqueror 会以自己的名义复制 Mozilla 的财产:

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

对于其他浏览器,您需要一个 JavaScript 解决方案。注意:返回 false 仅在 IE 和 Safari/Chrome 中就足够了;对于 Mozilla 和 Opera,还必须返回 false 。这也可能停止触发,因此在返回 false 而不是 .onselectstartonmousedownclickmousedownonclick

当然,您可以从脚本中分配这些处理程序,以避免弄乱标记,例如:

<div class="button">...</div>

.button { -moz-user-select: none; -webkit-user-select: none; -khtml-user-select: none; }

function returnfalse() {
    return false;
}

var divs= document.getElementsByTagName('div');
for (var i= divs.length; i-->0;)
    div.onselectstart= returnfalse;

评论

0赞 Pekka 10/28/2009
非常好,很完整。谢谢!