【问题标题】:How can I disable Ctrl+A (select all) using jquery in a browser?如何在浏览器中使用 jquery 禁用 Ctrl+A(全选)?
【发布时间】:2011-01-25 02:45:23
【问题描述】:

我试图防止从页面复制信息(当然对于非技术用户)。我知道如何使用鼠标disable selecting text。以下 jquery 代码有效:

$(function(){
  $.extend($.fn.disableTextSelect = function() {
    return this.each(function(){
      if($.browser.mozilla){//Firefox
        $(this).css('MozUserSelect','none');
      }else if($.browser.msie){//IE
        $(this).bind('selectstart',function(){return false;});
      }else{//Opera, etc.
        $(this).mousedown(function(){return false;});
      });
    });
    $('.noSelect').disableTextSelect();
});

但用户仍然可以使用 Ctrl+A 来选择整个页面。有什么解决方法吗?

【问题讨论】:

  • 拜托,不要那样做:总会有办法复制你的内容(就像你把它放在网上一样);而你的“安全”只会惹恼你的用户......
  • 可怕的想法。你为什么要做这样的事情?
  • 无论这是否是一个坏主意(我同意 :-)),这仍然是一个有效的技术问题,所以我看不出反对票的原因。
  • 男孩,我不知道有些问题被禁止了。这是我的客户(和 Intranet 应用程序)的业务需求。所以不幸的是,我不能去找他们说,“对不起,我不能那样做。堆栈溢出用户对这个想法投了反对票。”
  • @Keltex -- 作为开发人员,您的工作是向他们解释为什么这是一个非常糟糕的想法,无论如何都无法解决他们试图解决的问题,并且可能会打勾任何人无故使用系统。

标签: jquery


【解决方案1】:

此代码适用于您想要的每个 ctrl+key 组合 65是'A'的ASCII码

如果您还想检查“a”,请添加 97

$(function(){   
    $(document).keydown(function(objEvent) {        
        if (objEvent.ctrlKey) {          
            if (objEvent.keyCode == 65) {                         
                objEvent.disableTextSelect();
                return false;
            }            
        }        
    });
});    

应该可以,我直接写的,没有测试..

【讨论】:

  • @Marcx - 感谢您的回答,而不是因为您不喜欢业务需求而立即投反对票。
  • +1 表示解决方案。 @Keltex我认为上面评论的任何人实际上都没有对您的问题投反对票。但是向 cmets 宣传这种做法是完全正确的,其中一些论点可能会告诉您的客户一些关于这种“业务需求”的技术可行性。
  • 在 Chrome 37.0.2062.94 中,objEvent.disableTextSelect(); 上的“Uncaught TypeError: undefined is not a function”。
  • 在 Firefox 32 上无法捕获 ctrl + A 组合键。
  • 无法在最新的 Chrome 和 Firefox 中运行...由于 jQuery,不再受支持 - 添加版本:1.6,弃用:1.9,然后删除。你必须使用objEvent.PreventDefault();
【解决方案2】:

老实说,有些客户不了解互联网的工作原理,因此您应该尽自己的一份力量向他们解释,无论您做什么,都可以轻松保存向用户显示的任何内容。

您最多可以禁用某些功能,使最简单的用户难以复制文本。

如果你不这样做,有人会想办法克服你设置的任何权宜之计,他们会回复你说:“嘿,我以为我告诉过你锁定这个"

【讨论】:

  • @艾伦。已经这样做了……不幸的是,我的客户非常坚持。他支付账单。
  • 只要他明白这不会实现任何形式的隐私或盗版预防,并且有办法轻松绕过它,而且他们特别希望这样做,我就可以接受。跨度>
  • 类似于“只要你不介意为那些不可能实际工作的功能付费,我想我可以开发它。”我想有一段时间可以相处融洽,但我会觉得花钱写我知道行不通的代码会很糟糕。
  • @tvanfosson,我同意你的观点,但有些人不能亲自挑选他们的客户,而这些人可能是真正需要业务的人。 耸耸肩 整个过程都很糟糕。对于一个人,我可能会尽我所能反对这样的要求。我过去曾经成功过。
【解决方案3】:

适用于 Windows (Ctrl+A) + MacOS (CMD+A) 并使用 preventDefault() 而不是 return false

$(function(){   
  $(document).keydown(function(e) {    
    if ((e.ctrlKey || e.metaKey) && e.keyCode == 65) {
      e.preventDefault();
    }
  });
});

【讨论】:

    【解决方案4】:

    使用 css 很容易:

    body {
      -webkit-user-select: none;
      -moz-user-select: none;
      -ms-user-select: none;
      -user-select: none;
    }
    

    希望对你有帮助

    【讨论】:

      【解决方案5】:

      接受的答案不再有效,因为 disableTextSelect() 自 jQuery 1.9 以来已被弃用,后来它被删除,现在不支持。

      您必须使用objEvent.PreventDefault(); - 这适用于最新的 jQuery 和最新的浏览器:

      $(function() {
          $(document).keydown(function(objEvent) {
              if (objEvent.ctrlKey) {
                  if (objEvent.keyCode == 65) {
                      objEvent.preventDefault();
                  }
              }
          });
      });
      

      【讨论】:

        猜你喜欢
        • 2013-01-13
        • 1970-01-01
        • 2013-08-22
        • 1970-01-01
        • 2010-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多