我看到当我在调用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>
您可以使用以下步骤确认行为.
>将字符串foo复制到剪贴板.
>右键单击textarea字段并选择“粘贴”. div元素中没有任何内容.
>右键单击textarea字段,然后再次选择“粘贴”. foo出现在div元素中.
由于我希望div元素始终使用粘贴操作显示textarea元素中更新的内容,因此所需的输出分别是步骤2和步骤3中的foo和foo foo.
我设法获得所需输出的一种方法是使用window.setTimeout()延迟update()函数调用,而不是
textareaElement.onpaste = update
我有
textareaElement.onpaste = function() { window.setTimeout(update,100); };
这一次(演示:http://jsfiddle.net/cwpLS/).这就是我想要的.然而,这更像是一种解决方法,而不是一种直接的方式来做我想做的事情.我想知道是否有任何替代或更好的方法来做到这一点.