如何使用JavaScript检测Ctrl+V、Ctrl+C?

211

如何使用JavaScript检测Ctrl+VCtrl+C

我需要限制在文本区域内粘贴,请用户不要复制和粘贴内容,用户只能在文本区域中输入文本。

我该如何实现这个功能?


4
这是什么目的?我只能想到两种合理的情况,一是密码输入框(无论如何都无法复制),另一种是打字速度测试。我相信你可以检测到可疑的快速输入。 - Paul Butcher
11
有些情况下需要这样做。一个非常简单的例子是:学习外语的网站。如果您手写单词而不是使用复制粘贴,则学习效果会得到增强。 - back2dos
3
另一个合理的情况可能是需要双重输入以检测错误(例如,将您的电子邮件地址输入两次,以便我们知道它没有拼写错误)。不过,这样的用户可能会保留一份随机生成的电子邮件地址列表(例如,sneakemail),并且可能希望粘贴以确保准确性。 - Paul Butcher
52
@Paul Butcher- 这根本不是合法的情况,我讨厌那些这样做的网站,我总是复制/粘贴我的(长)电子邮件地址从一个输入到另一个输入框。破坏复制/粘贴功能是一个主要的可用性问题。它真的会让用户感到困惑,因为这对他们的思维模型非常基础,他们期望它“只是能够工作”。这就像你试图推开一扇门,但它却向你反方向打开! - EMP
7
每当页面禁止复制粘贴时,我通常会将文本粘贴到其他地方(我通常使用URL栏),然后使用Ctrl + A选择刚刚粘贴到URL栏中的文本,最后将其拖放到浏览器中无法粘贴的区域。我想,目前这种方法是不可避免的。 - Janakiram
显示剩余10条评论
21个回答

-4

有一些方法可以防止它发生。

然而,用户总是可以关闭JavaScript或查看页面的源代码。

一些示例(需要jQuery)

/**
* Stop every keystroke with ctrl key pressed
*/
$(".textbox").keydown(function(){
    if (event.ctrlKey==true) {
        return false;
    }
});

/**
* Clear all data of clipboard on focus
*/
$(".textbox").focus(function(){
    if ( window.clipboardData ) {
        window.clipboardData.setData('text','');
    }
});

/**
* Block the paste event
*/
$(".textbox").bind('paste',function(e){return false;});

编辑:正如Tim Down所说,这些函数都依赖于浏览器。


2
这有许多问题:首先,在没有“粘贴”事件的浏览器中无法工作,包括所有 Firefox 3 版本之前的版本。其次,“window.clipboardData”仅适用于 IE,我认为现在在 IE 中默认禁用了它。第三,禁用按下 Ctrl 键的所有“keydown”事件是过度的:您会阻止有用的键盘快捷键,例如 Ctrl-A(全选)和 Ctrl-Z(撤消)。第四,正如其他人所提到的,这是一件非常糟糕的事情。 - Tim Down
你说得没错,这个在每个浏览器上都不起作用。Ctrl块确实很烦人。但有一次客户想要屏蔽“确认电子邮件和密码”字段时,它还是很方便的。 - Gustavo Cardoso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接