JavaScript:通过双击禁用文本选择

标签 javascript jquery html selection

当双击 html 页面时,大多数浏览器会选择您双击的单词(或您三次单击的段落)。有没有办法摆脱这种行为?

请注意,我不想通过单击+拖动禁用常规选择;即 jQuery UI 的 $('body').disableSelection()document.onselectstart DOM 事件不是我想要的。

最佳答案

我担心您无法阻止选择本身成为浏览器的“ native 行为”,但您可以在做出选择后立即清除选择:

<script type="text/javascript">
document.ondblclick = function(evt) {
    if (window.getSelection)
        window.getSelection().removeAllRanges();
    else if (document.selection)
        document.selection.empty();
}
</script>

编辑:为了防止通过“三次点击”选择整个段落,这里是所需的代码:

var _tripleClickTimer = 0;
var _mouseDown = false;

document.onmousedown = function() {
    _mouseDown = true;
};

document.onmouseup = function() {
    _mouseDown = false;
};

document.ondblclick = function DoubleClick(evt) {
    ClearSelection();
    window.clearTimeout(_tripleClickTimer);

    //handle triple click selecting whole paragraph
    document.onclick = function() {
        ClearSelection();
    };

    _tripleClickTimer = window.setTimeout(RemoveDocumentClick, 1000);
};

function RemoveDocumentClick() {
    if (!_mouseDown) {
        document.onclick = null; 
        return true;
    }

    _tripleClickTimer = window.setTimeout(RemoveDocumentClick, 1000);
    return false;
}

function ClearSelection() {
    if (window.getSelection)
        window.getSelection().removeAllRanges();
    else if (document.selection)
        document.selection.empty();
}​

Live test case .

应该是跨浏览器的,请报告任何无法正常工作的浏览器。

关于JavaScript:通过双击禁用文本选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4117466/

相关文章:

java - 将 BlowfishJ Java 实现与 dren blowfish javascript 实现相匹配; 8字节后的加密值不同

javascript - JQuery getScript() 从 curl.js 模块调用匿名函数

asp.net - 将 JQuery 客户端错误和 ASP.NET 服务器端错误合并在同一个摘要中

javascript - jQuery - 如何在以下子元素中查找元素?

css - 为什么我的 css 媒体查询在内页上不起作用?

html - 当浏览器缩小时,如何正确对齐两个相互折叠的 div?

javascript - Angular 1.5 : pass attribute to component

javascript - 如何用 Javascript 解决多个粘性 header 问题?

php - 在 cgridview yii 中向下滚动动态加载数据

javascript - 使用 JavaScript 向前按钮