防止在 HTML 中选择

IT技术 javascript html selection
2021-01-21 22:43:37

我在 HTML 页面上有一个 div,每当我按下鼠标并移动它时,它都会显示“无法放下”光标,就像它选择了某些东西一样。有没有办法禁用选择?我尝试了 CSS 用户选择,但没有成功。

5个回答

的专有变体user-select将适用于大多数现代浏览器:

*.unselectable {
   -moz-user-select: -moz-none;
   -khtml-user-select: none;
   -webkit-user-select: none;

   /*
     Introduced in IE 10.
     See http://ie.microsoft.com/testdrive/HTML5/msUserSelect/
   */
   -ms-user-select: none;
   user-select: none;
}

对于 IE < 10 和 Opera,您将需要使用unselectable您希望不可选的元素属性。您可以使用 HTML 中的属性进行设置:

<div id="foo" unselectable="on" class="unselectable">...</div>

遗憾的是,此属性不是继承的,这意味着您必须在<div>. 如果这是一个问题,您可以改为使用 JavaScript 为元素的后代递归执行此操作:

function makeUnselectable(node) {
    if (node.nodeType == 1) {
        node.setAttribute("unselectable", "on");
    }
    var child = node.firstChild;
    while (child) {
        makeUnselectable(child);
        child = child.nextSibling;
    }
}

makeUnselectable(document.getElementById("foo"));
我很确定user-select只处理文本而不处理其他类型的元素
2021-03-22 22:43:37
@Lekensteyn:两者都可以防止选择,但理论上存在差异:developer.mozilla.org/en/CSS/-moz-user-select但是,以下内容似乎并未在 Firefox 5 中支持这一点:jsfiddle.net/vhwJ5/2
2021-03-24 22:43:37
@ithkuil:有趣。看起来-moz-none是要走的路。我会修改我的答案。
2021-03-25 22:43:37
在 Firefox 5 中,-moz-noneFirebug 似乎不会自动完成,尽管none是:(-moz-user-select: none有效)
2021-04-09 22:43:37
它未被选中但仍被复制到剪贴板(根据goo.gl/5P8uH上的 MDC 规范
2021-04-13 22:43:37

似乎 CSS 用户选择不会阻止图像拖放......所以......

HTML :

<img src="ico.png" width="20" height="20" alt="" unselectable="on" /> Blabla bla blabla

CSS :

* {
     user-select: none;
    -khtml-user-select: none;
    -o-user-select: none;
    -moz-user-select: -moz-none;
    -webkit-user-select: none;
}

::selection { background: transparent;color:inherit; }
::-moz-selection { background: transparent;color:inherit; }

JS:

$(function(){
    $('*:[unselectable=on]').mousedown(function(event) {
        event.preventDefault();
        return false;
    });
});
您可以使用“img”选择器,但要小心使用“event.preventDefault();” 因为没有其他与“鼠标按下”相关的事件会在您的页面上对它们起作用...
2021-04-13 22:43:37

在鼠标中使用cancelBubble=truestopPropagation()并移动处理程序。

什么钩住我的是,你需要在这两个鼠标按下和移动处理器,不只是招之一!
2021-03-30 22:43:37

event.preventDefault() 似乎可以解决问题(在 IE7-9 和 Chrome 中测试):

jQuery('#slider').on('mousedown', function (e) {
    var handler, doc = jQuery(document);
    e.preventDefault();
    doc.on('mousemove', handler = function (e) {
        e.preventDefault();
        // refresh your screen here
    });
    doc.one('mouseup', function (e) {
        doc.off('mousemove', handler);
    });
});
谢谢你,搜索了一段时间以正确的方式来阻止我列出我在点击时阻止的选择,因为禁用的值不会发布.....哈哈
2021-03-16 22:43:37

你有一些你选择的透明图像吗?通常在拖动图像时会出现“cant drop”图标。否则,它通常会在您拖动时选择文本。如果是这样,您可能必须使用 z-index 将图像放在所有内容后面。