Javascript OnPaste

时间:2012-06-10 22:47:14

标签: javascript input copy-paste

我现在有这个:

<input type="text" placeholder="Paste text" onPaste="alert(this.value);">

这确实有效,除了它返回一个空白警报窗口。我没有任何价值。帮助

2 个答案:

答案 0 :(得分:43)

onpaste事件在input的{​​{1}}发生变化之前触发。你需要一些诸如setTimeout

之类的东西
value

我在全局var中存储对<input type="text" placeholder="Paste text" onPaste="var e=this; setTimeout(function(){alert(e.value);}, 4);">​ 的引用,因为this在附加到窗口对象的超时函数的范围内是不可访问的。

我使用4毫秒作为超时,因为它是HTML5规范中的最小有效间隔/超时。 修改:如评论中所述,您还可以使用this毫秒作为timeOut,自动重新计算为0jsPerf tests

Fiddle

您也可以在4事件中使用函数调用onpaste作为参数,以防止您的HTML与JS混合太多。 :)

这是一个更容易阅读的功能,可以在多个输入中使用:

this

对于任何输入,只需function pasted(element) { setTimeout(function(){ alert(element.value); }, 0); //or 4 }​ 即可调用。

Fiddle

答案 1 :(得分:9)

这是因为onpaste事件在内容被粘贴到元素(link之前 之前触发,所以当你处理它时它还没有。

现代浏览器支持在事件处理程序中获取剪贴板数据的方法。有关跨浏览器的解决方案尝试,请参阅JavaScript get clipboard data on paste event (Cross browser)

此外,您可以通过简单地在事件处理函数中启动一个计时器(10毫秒就足够了)来解决您的输入值。