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


73

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


11
为什么要这么做?如果禁用ctrl + v,将使一个用户感到沮丧。旁边,您可以随时右键单击并选择粘贴
Christophe'Apr

7
@krike可能会迫使人们重新输入他们的电子邮件地址或密码?
greggreg 2011年

5
我将在浏览器中禁用JS,并且可以随时输入ctrl + v。
Kamilos 2011年

7
@Kamilos银行或脸书怎么样?如果禁用javascript,我们甚至无法在堆栈溢出中发表评论。
greggreg 2011年

17
@greg:“强迫人们重新输入他们的电子邮件地址”,然后祈祷告诉我,这有什么意义?如果您已经设置了毫无意义的技巧,例如“两次输入您的地址,看看您是否还记得它”,然后弄乱了我的剪贴板,只是想告诉我谁在负责,我就走了-如果是尝试给人留下良好的第一印象,然后我完全希望这个网站糟透了。
Piskvor于2011年

Answers:


182

现在,这对于IE FF Chrome可以正常使用...虽然我尚未针对其他浏览器进行过测试

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

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


12
$('#txtInput')。bind(“ contextmenu”,function(e){e.preventDefault();}); //这将禁用右键单击
Misam

3
有趣的是,我不知道这些事件的存在。我在浏览器怪癖模式下找到了此页面,该页面提供了有关这些事件的跨浏览器兼容性的信息:quirksmode.org/dom/events/cutcopypaste.html
DannyLane 2011年

Safari也支持此功能。
汉尼斯·卡皮拉2015年

哇,太好了!您可以禁用上下文菜单,但是最大的好处是它不是必需的!
daVe 2015年

1
注意: “自jQuery 3.0起,已不推荐使用.bind()。自jQuery 1.7起,它已被.on()方法取代,用于将事件处理程序附加到文档,因此不鼓励使用它。” -来源:api.jquery.com/bind
benomatis

21

编辑:将近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处
Piskvor在2011年

@Piskvor我没有做任何假设,问题是如何禁用ctrl + v,这就是我的回答。
DannyLane

@DannyLane:你是对的。我已经知道这个问题是“完全禁用粘贴”,但这可能不是OP想要的。
Piskvor在2011年

谢谢你-正在使用按键,无法弄清楚为什么它在IE中不起作用
Addsy 2011年

@DannyLane:在不同的平台上,“粘贴”操作可能有不同的键绑定。
dma_k 2015年

11

从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;
});

4

我在Angular项目中尝试了此方法,并且在没有jQuery的情况下也能正常工作。

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

在脚本部分:

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

在非角度项目中,请使用“ onPaste”代替“ $ event”的“ ng-paste”和“ event”。



1

 $(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" />


0

您可以捕获关键事件:

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


2
window.clipboardData.clearData()仅适用于ie。如果您正在捕获事件,则最好阻止默认设置并返回false。这将有效地禁用键盘启动的粘贴。我会发布示例,但我太懒了,而且您已经很亲近了。
greggreg

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

在文本框实时事件剪切中,复制,粘贴事件被阻止,并且效果很好。


在较新的jQuery库中不推荐使用“ live”。您可以改用“ on”。
Misam,2015年

$(document).ready(function(){...})可以重写为等效形式$(function(){...})
dma_k 2015年

立即调用函数表达式(IIFE)也可以使用。(function(){}());
Vikas Bansal 2015年

0

我已经在chrome浏览器上测试了该问题,并且对我有效。

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

    e.preventDefault();
});

-1

$(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" />


答案已被复制
马诺Kadolkar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.