如何使用 jQuery 禁用粘贴 (Ctrl+V)?

IT技术 javascript jquery copy-paste textinput
2021-02-21 17:08:20

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

6个回答

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

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

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

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

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


这似乎有效。

您可以使用 jQuery侦听键盘事件,如果它是您正在寻找的组合键,则可以防止该事件完成。注意,检查 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
2021-04-21 17:08:20
谢谢你 - 正在使用按键并且无法弄清楚为什么它在 IE 中不起作用
2021-05-08 17:08:20
@DannyLane:在不同的平台上,“粘贴”操作可能有不同的键绑定。
2021-05-08 17:08:20
@Piskvor 我没有做任何假设,问题是如何禁用 ctrl+v,这是我的回答。
2021-05-10 17:08:20
@DannyLane:你是对的。我已经理解这个问题是“完全禁用粘贴”,但这可能不是 OP 想要的。
2021-05-11 17:08:20

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

$(function(){
    $(document).on("cut copy paste","#txtInput",function(e) {
        e.preventDefault();
    });
});
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;
});

我在我的 Angular 项目中尝试过这个,它在没有 jQuery 的情况下运行良好。

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

在脚本部分:

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

在非角度项目中,使用 'onPaste' 而不是 'ng-paste' 和 'event' instesd of '$event'。