我现在有这个:
<input type="text" placeholder="Paste text" onPaste="alert(this.value);">
这确实有效,除了它返回一个空白警报窗口。我没有任何价值。帮助
答案 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,自动重新计算为0
。 jsPerf tests
您也可以在4
事件中使用函数调用onpaste
作为参数,以防止您的HTML与JS混合太多。 :)
这是一个更容易阅读的功能,可以在多个输入中使用:
this
对于任何输入,只需function pasted(element) {
setTimeout(function(){
alert(element.value);
}, 0); //or 4
}
即可调用。
答案 1 :(得分:9)
这是因为onpaste
事件在内容被粘贴到元素(link之前 之前触发,所以当你处理它时它还没有。
现代浏览器支持在事件处理程序中获取剪贴板数据的方法。有关跨浏览器的解决方案尝试,请参阅JavaScript get clipboard data on paste event (Cross browser)。
此外,您可以通过简单地在事件处理函数中启动一个计时器(10毫秒就足够了)来解决您的输入值。