CSS 或 Javascript 禁用从 CTRL + A 突出显示的文本选择

Posted

技术标签:

【中文标题】CSS 或 Javascript 禁用从 CTRL + A 突出显示的文本选择【英文标题】:CSS or Javascript to disable text selection highlighting from CTRL + A 【发布时间】:2013-05-19 11:59:54 【问题描述】:

注意:这个问题与How to disable text selection highlighting using CSS?不同

在提问之前,我阅读了上述问题的讨论历史。一切正常,除了我可以允许CTRL+A(全选)仅在输入元素内有效。

那是因为我正在桌面上部署我的 html5 应用程序,我希望 GUI/Forms 应用程序具有相同的行为。

起点是什么?尝试使用 keypress 事件绑定所有元素并观察 CTRL + A keyCode?这种方法的缺点是必须控制一切并注意重新渲染。

我更喜欢 CSS 解决方案,但欢迎提出任何想法。

提前致谢。

@EDIT: 我发现了这个糟糕的解决方案,但可以正常工作:

$(document).keydown(function(objEvent) 
    if (objEvent.ctrlKey) 
        if ((objEvent.keyCode === 65) || (objEvent.keyCode == 97)) 
            if ($(objEvent.target).not("input").disableTextSelect().length) 
                return false;
            
        
    
);

【问题讨论】:

keypress 不会抓住 CTRL 但keydown 应该可以工作。 您是要允许 Ctrl+A,还是不允许 Ctrl+A? 禁止 <body> 并允许在 <input> 问题不清楚。您希望仅使用 Ctrl+A 选择文本吗? 你到底为什么要这样做?尝试规避基本浏览器行为不是您的事。 【参考方案1】:

可能重复。

如果您被允许使用 jquery,here 就是您正在寻找的答案。

65 是 'A' 的 ascii,而 97 是 'a' 如果你想同时考虑两者的话。

$(function()   
    $(document).keydown(function(objEvent) 

            if (objEvent.ctrlKey) 
                if ($(objEvent.target).not('input'))
                    if (objEvent.keyCode == 65 || objEvent.keyCode == 97)                          
                        objEvent.preventDefault();
                    
                
                    
    );
);   

编辑:根据您的评论进行修改以允许输入。

编辑 2:如果包含 jQuery UI,则可以使用 disableSelection() 而不是 disableTextSelect() 否则试试this.

编辑 3:抱歉,在 jQuery 1.9 中已弃用 disableSelection(),请参阅 here.。试试这个简单的技巧,而不是 disableSelection()。将objEvent.disableTextSelect(); 替换为上面的objEvent.preventDefault();

编辑 4:让它更干净一些。

【讨论】:

我试试这个例子,结果TypeError: objEvent.disableTextSelect is not a function 我已经注入这个插件并再次测试code.jdempster.com/jQuery.DisableTextSelect/… - 不工作 @AllysondePaula 您包括哪个版本的 jQuery?您是否尝试过第二种方法(包括 jQuery UI 和使用 disableSelection())?您遇到什么错误? jQuery v1.9.1 和 jQuery UI - v1.10.1 - disableSelection() 也不起作用 我找到了一个解决方案 - 它很丑,但有效,请参阅我的编辑。我会接受您的正确回答,因为几乎可以解决部分问题。【参考方案2】:
user-select: none;
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;

使用上述 CSS 属性来阻止该行为。

【讨论】:

OP 专门要求提供适用于 Ctrl+A 的解决方案。 重复的问题,在这里得到了相同的答案***.com/questions/14598070/… 我的印象是 OP 希望允许 Ctrl+A:“一切正常,除了我可以允许 CTRL+A(全选)仅在输入元素内有效。 "

以上是关于CSS 或 Javascript 禁用从 CTRL + A 突出显示的文本选择的主要内容,如果未能解决你的问题,请参考以下文章

Vanilla JavaScript:禁用整个网站中的所有关键组合

google chrome 调试css怎么禁止缓存

如何使用 javascript css 或 html attr 禁用 iOS 链接预览

拖动禁用 CSS 悬停

如何在javascript上实现禁用ctrl alt del键

如何使用JavaScript禁用CSS转换,更新样式,然后快速恢复转换