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

JavaScript:通过双击禁用文本选择,javascript,jquery,html,selection,Javascript,Jquery,Html,Selection,当双击html页面时,大多数浏览器会选择双击的单词(或三次单击的段落)。有没有办法摆脱这种行为 请注意,我不想通过单击+拖动禁用常规选择;i、 e.jQuery UI的$('body').disableSelection()和文档.onselectstartDOM事件不是我想要的。我担心您无法阻止选择本身成为浏览器的“本机行为”,但您可以在选择完成后立即清除它: <script type="text/javascript"> document.ondblclick = functio

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


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

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

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


应该是跨浏览器的,请报告它不工作的任何浏览器。

只是想把它扔出去,但下面是我在我的页面中插入的代码,我希望用户能够快速点击。但是,这也将禁用标准的单击拖动文本选择

document.body.onselectstart = function() {
    return false;
}
document.body.style.MozUserSelect = "none";
if (navigator.userAgent.toLowerCase().indexOf("opera") != -1) {
    document.body.onmousedown = function() {
        return false;
    }
}

对我来说似乎很好。

把这个放在css感兴趣的部分就行了

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

如果您真的想在双击时禁用选择,而不仅仅是在双击后删除选择(我觉得很难看),则需要在第二次鼠标向下事件中
返回false
(ondblclick不起作用,因为选择是在mousedown上进行的)

**如果有人根本不想选择,最好的解决方案是使用CSS
user select:none就像Maurizio Battaghini提议的那样

// set to true if you want to disable also the triple click event
// works in Chrome, always disabled in IE11
var disable_triple_click = true;

// set a global var to save the timestamp of the last mousedown
var down = new Date().getTime();
var old_down = down;

jQuery(document).ready(function($)
{
    $('#demo').on('mousedown', function(e)
    {
        var time = new Date().getTime();

        if((time - down) < 500 && 
        (disable_triple_click || (down - old_down) > 500))
        {
            old_down = down;
            down = time;

            e.preventDefault(); // just in case
            return false; // mandatory
        }

        old_down = down;
        down = time;
    });
});
//如果要同时禁用三次单击事件,请将其设置为true
//在Chrome中工作,在IE11中始终禁用
var disable_triple_click=true;
//设置一个全局变量以保存上次鼠标向下移动的时间戳
var down=new Date().getTime();
var old_down=down;
jQuery(文档).ready(函数($)
{
$('#demo')。on('mousedown',函数(e)
{
var time=new Date().getTime();
如果((时间下降)<500&&
(禁用三重单击(向下-旧向下)>500))
{
老唐=唐;
停机=时间;
e、 preventDefault();//以防万一
返回false;//强制
}
老唐=唐;
停机=时间;
});
});

重要注意事项:我将灵敏度设置为500毫秒,但双击灵敏度(检测为双击的最大点击间隔时间)可能因操作系统和浏览器而异,并且通常是用户可配置的。-


在Chrome和IE11中测试。

以下内容适用于我当前的Chrome(v56)、Firefox(v51)和MS Edge(v38)浏览器

var test=document.getElementById('test');
test.addEventListener('mousedown',函数(e){
如果(如细节>1){
e、 预防默认值();
}
});

这是一个测试区域

不是我的决定。我为之编码的那个家伙就想这样。可能是因为页面是浏览器游戏的一部分,一些增加/减少值的按钮(带有单击事件的div)吸引用户双击,因为这比多次单击要快。如果这样做会让人讨厌,而且看起来很奇怪。谢谢,效果很好。尽管我使用了匿名函数而不是给它命名,但我认为这没有多大意义,因为它是立即分配的,不太可能在其他地方使用。干杯,我同意你关于匿名函数的看法,给所有东西命名只是我的老习惯(坏习惯)/但这是一种习惯,可以帮助调试器在查看堆栈时知道函数的名称,而不是看到一堆匿名函数。FF更擅长猜测函数名,即在我的大部分时间里显示匿名stacks@Juan谢谢,说得好。。当我必须调试时,我通常使用警报,所以这并不重要。:-)@sleepycal对您糟糕的用户体验表示抱歉,但您应该责怪坚持使用这些功能的网站所有者和/或客户,而不是射击messenger。请再次阅读问题:注意,我不想通过单击+拖动禁用常规选择这似乎非常有效。没有替身。没有三重。没有选择。。thanks@ThiefMaster别对我苛刻:)我不懂英语,我正在练习。我在阅读请求时犯了一个错误,虽然它没有回答问题,但它正是我想要的,谢谢。不确定这是否只是最近才突然成为可能,但这是唯一提供完美解决方案的答案。
// set to true if you want to disable also the triple click event
// works in Chrome, always disabled in IE11
var disable_triple_click = true;

// set a global var to save the timestamp of the last mousedown
var down = new Date().getTime();
var old_down = down;

jQuery(document).ready(function($)
{
    $('#demo').on('mousedown', function(e)
    {
        var time = new Date().getTime();

        if((time - down) < 500 && 
        (disable_triple_click || (down - old_down) > 500))
        {
            old_down = down;
            down = time;

            e.preventDefault(); // just in case
            return false; // mandatory
        }

        old_down = down;
        down = time;
    });
});