【问题标题】:How to disable Paste (Ctrl+V) with jQuery?如何使用 jQuery 禁用粘贴(Ctrl+V)?
【发布时间】:2011-07-27 11:27:46
【问题描述】:

如何在我的输入文本字段之一中使用 jQuery 禁用粘贴 (Ctrl+V) 选项?

【问题讨论】:

  • 你为什么要这样做?如果你禁用 ctrl+v,它会让不止一个用户感到沮丧。除此之外,您始终可以右键单击并选择粘贴
  • @krike 可能会强迫人们重新输入他们的电子邮件地址或密码?
  • 我将在浏览器中禁用JS,并且可以随时输入ctrl+v。
  • @Kamilos 银行或 Facebook 怎么样?如果您禁用 javascript,我们甚至无法在堆栈溢出中发布 cmets。
  • @greg:“强迫人们重新输入他们的电子邮件地址”——请告诉我,这有什么意义?如果你已经在设置一些无意义的技巧,比如“输入你的地址两次,看看你是否真的记得它”,然后弄乱我的剪贴板,只是为了告诉我谁负责,我要离开 - 如果 试图给人留下良好的第一印象,那么我完全认为这个网站很糟糕。

标签: javascript jquery copy-paste textinput


【解决方案1】:

这现在适用于 IE FF Chrome……不过我还没有测试过其他浏览器

$(document).ready(function(){
   $('#txtInput').on("cut copy paste",function(e) {
      e.preventDefault();
   });
});

编辑:正如webeno 所指出的,.bind() 已被弃用,因此建议改用.on()

【讨论】:

  • $('#txtInput').bind("contextmenu",function(e){ e.preventDefault(); });//这个禁用右键
  • 有趣,我不知道这些事件存在。我在浏览器怪癖模式下找到了此页面,该页面提供了有关这些事件的跨浏览器兼容性的信息:quirksmode.org/dom/events/cutcopypaste.html
  • Safari 也支持这个。
  • 哇,太棒了!您可以禁用上下文菜单,但最重要的是它不是必需的!
  • 注意 "从 jQuery 3.0 开始,.bind() 已被弃用。自 jQuery 1.7 起,它已被用于将事件处理程序附加到文档的 .on() 方法取代,所以它的使用已经被劝阻了。” -- 来源:api.jquery.com/bind
【解决方案2】:

编辑:已经快 6 年了,现在看这个我不推荐这个解决方案。接受的答案肯定要好得多。去吧!


这似乎有效。

您可以使用 jQuery 收听 keyboard events 并阻止事件完成,如果它是您正在寻找的组合键。 注意,检查 118 和 86(Vv

这里的工作示例: http://jsfiddle.net/dannylane/9pRsx/4/

$(document).ready(function(){
    $(document).keydown(function(event) {
        if (event.ctrlKey==true && (event.which == '118' || event.which == '86')) {
            alert('thou. shalt. not. PASTE!');
            event.preventDefault();
         }
    });
});

更新: keypress 在 IE 中不会触发,请改用 keydown。

【讨论】:

  • 不适用于右键单击+粘贴,或那些“多媒体键”;这些使用与键盘快捷键不同的机制。此外,您假设粘贴始终且仅在 Ctrl+V
  • @Piskvor 我没有做任何假设,问题是如何禁用我回答的 ctrl+v。
  • @DannyLane:你是对的。我已经将问题理解为“完全禁用粘贴”,但这可能不是 OP 想要的。
  • 谢谢 - 正在使用按键,但无法弄清楚为什么它在 IE 中不起作用
  • @DannyLane:在不同的平台上,“粘贴”操作可能有不同的键绑定。
【解决方案3】:

从 JQuery 1.7 开始,您可能希望改用 on 方法

$(function(){
    $(document).on("cut copy paste","#txtInput",function(e) {
        e.preventDefault();
    });
});

【讨论】:

    【解决方案4】:
    jQuery('input.disablePaste').keydown(function(event) {
        var forbiddenKeys = new Array('c', 'x', 'v');
        var keyCode = (event.keyCode) ? event.keyCode : event.which;
        var isCtrl;
        isCtrl = event.ctrlKey
        if (isCtrl) {
            for (i = 0; i < forbiddenKeys.length; i++) {
                if (forbiddenKeys[i] == String.fromCharCode(keyCode).toLowerCase()) {
                     return false;
                }
            }
        }
        return true;
    });
    

    【讨论】:

      【解决方案5】:

      我在我的 Angular 项目中尝试过,没有 jQuery 也能正常工作。

      <input type='text' ng-paste='preventPaste($event)'>
      

      在脚本部分:

      $scope.preventPaste = function(e){
         e.preventDefault();
         return false;
      };
      

      在非 Angular 项目中,使用 'onPaste' 代替 'ng-paste' 和 'event' instesd of '$event'。

      【讨论】:

        【解决方案6】:

        以下代码将禁用从整页剪切、复制和粘贴。

        $(document).ready(function () {
           $('body').bind('cut copy paste', function (e) {
              e.preventDefault();
           });
        });
        

        完整的教程和工作演示可以从这里找到 - Disable cut, copy and paste using jQuery

        【讨论】:

          【解决方案7】:

           $(document).ready(function(){
             $('#txtInput').on("cut copy paste",function(e) {
                e.preventDefault();
             });
          });
            <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
              <input type="text" id="txtInput" />

          【讨论】:

            【解决方案8】:

            你可以捕捉关键事件:

            function checkEventObj ( _event_ ){
                // --- IE explorer
                if ( window.event )
                    return window.event;
                // --- Netscape and other explorers
                else
                    return _event_;
            }
            
            document.keydown = function(_event) {
                var e = checkEventObject(_event);
            
                if( e.ctrlKey && (e.keyCode == 86) )
                    window.clipboardData.clearData();
            }
            

            未经测试,但可以提供帮助。

            来自comentcamarche和Zakaria

            【讨论】:

            • window.clipboardData.clearData() 仅适用于 ie。如果你正在捕捉事件,你不妨阻止默认并返回 false。这将有效地禁用键盘启动的粘贴。我会发布这个例子,但我太懒了,而且你已经很接近了。
            【解决方案9】:
            $(document).ready(function(){
              $('#txtInput').live("cut copy paste",function(e) {
                e.preventDefault();
              });
            });
            

            在文本框实时事件中,剪切、复制、粘贴事件被阻止并且运行良好。

            【讨论】:

            • 'live' 在较新的 jQuery 库中已弃用。您可以改用“on”。
            • $(document).ready(function(){...}) 可以重写为等效的$(function(){...})
            • 也可以使用立即调用函数表达式 (IIFE)。(function() { }());
            【解决方案10】:

            我已经在 chrome 浏览器上测试了这个问题,它对我有用。以下是防止在文本框中粘贴代码并防止右键单击的解决方案。

               $(".element-container").find('input[type="text"]').live("contextmenu paste", function (e) {
            
                e.preventDefault();
            });
            

            【讨论】:

              【解决方案11】:

              $(document).ready(function(){
                 $('input').on("cut copy paste",function(e) {
                    e.preventDefault();
                 });
              });
              <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
              <input type="text" />

              【讨论】:

              • 答案已复制
              猜你喜欢
              • 2022-06-17
              • 2014-09-06
              • 2020-11-11
              • 2013-03-15
              • 2022-12-22
              • 1970-01-01
              • 2021-12-10
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多