如何在粘贴上获取textarea输入字段的新值?

Sus*_*Pal 7 html javascript dom onpaste

我看到当我尝试在onpaste调用其函数时从textarea字段读取值时,我得到字段的旧值(粘贴操作之前的值),而不是新值(粘贴操作之后的值).

以下是此行为的演示:http://jsfiddle.net/qsDnr/

代码的副本如下:

<!DOCTYPE html>
<html>
<head>
<title>On Paste</title>
<script type="text/javascript">
var textareaElement;
var previewElement;

function update()
{
    previewElement.innerHTML = textareaElement.value;
}

window.onload = function() {
    textareaElement = document.getElementById('textarea');
    previewElement = document.getElementById('preview');
    textareaElement.onpaste = update    
}
</script>
</head>
<body>
<textarea id="textarea">
</textarea>
<div id="preview">
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

您可以使用以下步骤确认行为.

  1. 将字符串复制foo到剪贴板.
  2. 右键单击textarea字段并选择"粘贴".div元素中没有任何内容.
  3. 右键单击textarea字段并再次选择"粘贴".foo出现在div元素中.

因为我想要的div元素始终显示什么是与粘贴操作textarea元素更新,所需的输出foo,并foo foo在步骤2和步骤分别3.

我设法获得所需输出的一种方法是通过延迟update()函数调用window.setTimeout(),而不是

textareaElement.onpaste = update    
Run Code Online (Sandbox Code Playgroud)

我有

textareaElement.onpaste = function() {
    window.setTimeout(update, 100);
};
Run Code Online (Sandbox Code Playgroud)

这一次(演示:http://jsfiddle.net/cwpLS/).这就是我想要的.然而,这更像是一种解决方法,而不是一种直接的方式来做我想做的事情.我想知道是否有任何替代或更好的方法来做到这一点.

Eug*_*ene 3

我非常确定 setTimeout 解决方案是实现所需效果的唯一方法,或者尝试访问剪贴板对象 - 如果您要跨浏览器和旧浏览器支持,这可能会变得混乱。