【问题标题】:CSS or Javascript to disable text selection highlighting from CTRL + ACSS 或 Javascript 禁用从 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 选择文本吗?
  • 你到底为什么要这样做?尝试规避基本浏览器行为不是您的事。

标签: javascript css html events


【解决方案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 的解决方案。
  • 重复的问题,在这里得到了相同的答案stackoverflow.com/questions/14598070/…
  • 我的印象是 OP 希望允许 Ctrl+A:“一切正常,除了我可以允许 CTRL+A(全选)仅在输入元素内有效。 "
猜你喜欢
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
  • 2021-07-23
  • 2015-07-11
  • 2013-03-23
相关资源
最近更新 更多