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

时间:2012-03-25 03:53:56

标签: javascript html 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>

您可以通过以下步骤确认行为。

  1. 将字符串foo复制到剪贴板。
  2. 右键单击textarea字段并选择“粘贴”。 div元素中没有任何内容。
  3. 右键单击textarea字段,然后再次选择“粘贴”。 foo出现在div元素中。
  4. 由于我希望div元素始终显示textarea元素中使用粘贴操作更新的内容,因此在步骤2和步骤3中所需的输出分别为foofoo foo

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

    textareaElement.onpaste = update    
    

    我有

    textareaElement.onpaste = function() {
        window.setTimeout(update, 100);
    };
    

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

2 个答案:

答案 0 :(得分:3)

我很确定你setTimeout解决方案是实现所需效果的唯一方法,或者尝试访问剪贴板对象 - 如果你要使用跨浏览器&amp; amp;旧的浏览器支持。

答案 1 :(得分:0)

在跨浏览器中没有直接的方法。请参阅以下链接,了解firefox中的行为。

Mozilla

  

目前没有以DOM方式获取正在粘贴的文本;你必须使用nsIClipboard来获取这些信息。

另请参阅讨论其他可能性的stackoverflow link