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

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

140781 次浏览

You can catch key event :

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

没有经过测试,但是,可以帮助。

Source from (咒语) and Zakaria

编辑: 差不多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();
}
});
});

Update: Keypress 在 IE 中不会触发,而是使用 keydown。

这现在工作的 IE FF 浏览器正常... 我没有测试其他浏览器虽然

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

编辑: 正如 Webeno所指出的,.bind()是不推荐的,因此建议使用 .on()代替。

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

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

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

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

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

在剧本部分:

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

在非角度项目中,使用‘ onPaste’而不是‘ ng-粘贴’,使用‘ event’而不是‘ $event’。

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

在文本框实时事件剪切,复制,粘贴事件被阻止,它工作得很好。

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

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

The full tutorial and working demo can be found from here - Disable cut, copy and paste using jQuery

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

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


e.preventDefault();
});

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

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