Javascript 如何知道用户正在键入或粘贴?

Javascript 如何知道用户正在键入或粘贴?,javascript,jsp,paste,Javascript,Jsp,Paste,在JSP的文本字段中,我想知道用户是在键入数据还是只是粘贴数据。 我如何使用javascript识别它 编辑:根据安迪的回答,我知道我该怎么做,但仍然很好奇那些家伙在粘贴事件上是怎么写的。计算按键次数,确保它与文本框中的内容匹配。粘贴不会像文本框中那样有完整的字符数。你永远不会知道。即使在截取键输入时,用户也可能使用鼠标使用上下文菜单进行粘贴。访问剪贴板(将输入与剪贴板内容进行比较)将无法按您希望的方式工作,因为这是一个严格的仅限用户的操作。未经用户明确同意,您无法以编程方式访问(浏览器将显示确

在JSP的文本字段中,我想知道用户是在键入数据还是只是粘贴数据。 我如何使用javascript识别它


编辑:根据安迪的回答,我知道我该怎么做,但仍然很好奇那些家伙在粘贴事件上是怎么写的。

计算按键次数,确保它与文本框中的内容匹配。粘贴不会像文本框中那样有完整的字符数。

你永远不会知道。即使在截取键输入时,用户也可能使用鼠标使用上下文菜单进行粘贴。访问剪贴板(将输入与剪贴板内容进行比较)将无法按您希望的方式工作,因为这是一个严格的仅限用户的操作。未经用户明确同意,您无法以编程方式访问(浏览器将显示确认消息)。

Safari、Chrome、Firefox和Internet Explorer都支持
onpaste
事件(不确定Opera)。锁定
onpaste
事件,您将能够捕获粘贴的内容。
写这个很简单。使用html将事件处理程序添加到输入中:

<input type="text" id="myinput" onpaste="handlePaste(event);">

据我所知,Opera不支持
onpaste
事件。您可以使用
DOMAtrrModified
事件,但即使脚本更改输入框的值,也会触发该事件,因此您必须小心使用它。不幸的是,我不熟悉突变事件,所以我不想写一个我不相信的例子来搞乱这个答案。

我知道对于textarea,您可以使用
onPaste
事件捕获粘贴事件

HTML:

至于打字,有
onKeyDown
onkeydup
onKeyPress
事件

希望这有帮助


可能的相关问题

这很聪明,但不防水。如果我在键入后粘贴,可能是在使用backspace重新开始后粘贴呢?请检查文本框中的字符总数。粘贴将使该值增加的幅度大于您的on key事件检测到的值。delete键具有代码查找功能并减少计数:)您可以不使用任何键从上下文菜单中粘贴,因此处理事件无法捕获此项。可以,但字符仍显示在文本框中,因此您知道文本框中的字符数大于键入的数,因此可以检测粘贴我看到上面有一个onpaste事件解决了这个问题。但我想你是对的。我可以继续把一个字符粘贴到另一个字符上,但我会挑剔:)我从来不知道这是我喜欢的原因。@Tim Down:是的,但我认为这不值得一提,因为很少有人使用Firefox 2.0。我认为这些东西总是值得一提的。我不想再提IE 4,甚至可能是IE 5中的某些东西是否有效了,但Firefox 2.0并没有那么老。@Ravi:我不确定我是否理解你问题的更新-你是说浏览器供应商是如何编写事件的?或者别的什么?是的,如果我想编写我自己的onpaste事件,我应该怎么做?
var myInput = document.getElementById("myInput");

if ("onpaste" in myInput) // onpaste event is supported
{
    myInput.onpaste = function (e)
    {
        var event = e || window.event;
        alert("User pasted");
    }
}
// Check for mutation event support instead
else if(document.implementation.hasFeature('MutationEvents','2.0'))
{
    /* You could handle the DOMAttrModified event here, checking 
       new value length vs old value length but it wouldn't be 100% reliable */
}
<textarea id="textEditor" />
var editor = document.getElementById("textEditor");

if (isIE /* determine this yourself */) {
   editor.onPaste = function() {

   }
} else {
   //Not IE
   editor.onpaste = function() {

   }
}

//The capitalisation of the onpaste (non-IE) and onPaste (IE) makes a difference.