禁用双击文本选择

12

我有一个切换侧边菜单的脚本:

<script>
    // Closes the sidebar menu
    $("#menu-close").click(function (e) {
        e.preventDefault();
        $("#sidebar-wrapper").toggleClass("active");
    });
    // Opens the sidebar menu
    $("#menu-toggle").click(function (e) {
        e.preventDefault();
        $("#sidebar-wrapper").toggleClass("active");
    });
</script>

我在每个部分标签中都使用它:

ondblclick = $("#menu-close").click()

但问题在于当我双击某个地方时,它也会选择文本。问题是:如何禁用整个页面上的双击选择?如果我能将其实现到我的实际脚本中那就太棒了。

更新:

document.getElementById("el").ondbclick = function(ev) {
    ev.preventDefault()
    alert()
    return false}

$("#menu-close").click(function (e) {
    e.preventDefault();
    $("#sidebar-wrapper").toggleClass("active");
});
// Opens the sidebar menu
$("#menu-toggle").click(function (e) {
    e.preventDefault();
    $("#sidebar-wrapper").toggleClass("active");
});

我不想选择具有id="el"的元素,但它仍然无效。


有一些 CSS 规则可以用来实现这个功能 - 正如 @CodeiSir 所指出的那样 - 但不要将它们应用于整个文档,因为这对用户体验不利。只需将它们添加到可能被双击的按钮上即可。 - Rory McCrossan
我忘了说,我的网站的概念是您可以在任何地方双击以切换菜单。因此,我不能在任何按钮上使用它。 - Yamiteru Iori
3个回答

31

在元素上使用这些CSS规则:

#menu-close {
    -moz-user-select: none;
    -webkit-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

对于不应被选中的每个元素都要执行此操作。或者只需针对body {执行以适用于所有内容。


如果您不想在任何地方禁用选择,则可以在双击选择后删除它:

document.getElementById("el").ondbclick = function(ev) {
  ev.preventDefault()
  alert()
  return false
}
<div id="el"> asd</div>


1
也许您没有将其应用于正确的元素。如果您提供HTML代码,我们可以更好地帮助您。 - CoderPi
我忘了说,我的网站的概念是您在任何地方双击,它就会切换菜单.. 所以我不能在任何类型的按钮或特定元素上使用它.. - Yamiteru Iori
@YamiteruIori,我添加了另一个选项。 - CoderPi
@YamiteruIori,这个方法对你有用吗?如果是的话,也许可以接受这个答案。 - CoderPi
不好意思,还没有完成。我的网站已经上线了,但我仍在努力完善它 ;) yamiteru.com - Yamiteru Iori
这是一个简单而整洁的解决方案。 - Hidayt Rahman

4
(element).querySelector('mousedown', (e) => {
    e.preventDefault()
})

使用纯 JavaScript...


1
这将禁用双击文本选择,但不会影响大屏幕选择。完美!就像 Atlaskit 按钮一样 https://atlaskit.atlassian.com/packages/core/button - warkentien2

-2

你可以像这样应用类

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

6
这会全局禁用选择功能。我只想在双击时禁用它。 - Yamiteru Iori

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接