【发布时间】:2012-06-10 22:47:14
【问题描述】:
我现在有这个:
<input type="text" placeholder="Paste text" onPaste="alert(this.value);">
这确实有效,除了它返回一个空白警报窗口。我没有任何价值。帮忙?
【问题讨论】:
标签: javascript input copy-paste
我现在有这个:
<input type="text" placeholder="Paste text" onPaste="alert(this.value);">
这确实有效,除了它返回一个空白警报窗口。我没有任何价值。帮忙?
【问题讨论】:
标签: javascript input copy-paste
onpaste 事件在 input 的 value 更改之前触发。你需要像setTimeout这样的东西:
<input type="text" placeholder="Paste text" onPaste="var e=this; setTimeout(function(){alert(e.value);}, 4);">
我在全局变量中存储了对this 的引用,因为在附加到窗口对象的超时函数范围内无法访问this。
我使用 4 毫秒作为超时,因为它是 HTML5 规范中的最小有效间隔/超时。 编辑: 如 cmets 中所述,您还可以使用 0 毫秒作为 timeOut,它会自动重新计算为 4。 jsPerf tests.
您也可以在您的onpaste 事件中使用函数调用,将this 作为参数传递,以防止您的HTML 与JS 混合过多。 :)
这是一个更易于阅读的函数,您可以在多个输入中使用它:
function pasted(element) {
setTimeout(function(){
alert(element.value);
}, 0); //or 4
}
任何输入都可以简单地使用onPaste="pasted(this)" 调用。
【讨论】:
这是因为 onpaste 事件在内容被粘贴到元素 (link) 之前触发,因此在您处理它时它还不存在。
现代浏览器支持在事件处理程序中获取剪贴板数据的方法。请参阅JavaScript get clipboard data on paste event (Cross browser) 了解跨浏览器解决方案尝试。
此外,您始终可以通过在事件处理函数中启动一个计时器(10 毫秒应该足够)来解决您的问题,以便稍后检查您的输入值。
【讨论】: