Javascript 如何知道用户正在键入或粘贴?
在JSP的文本字段中,我想知道用户是在键入数据还是只是粘贴数据。 我如何使用javascript识别它Javascript 如何知道用户正在键入或粘贴?,javascript,jsp,paste,Javascript,Jsp,Paste,在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.