我看到当我尝试在调用其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
复制到剪贴板。foo
出现在div元素中。由于我希望div元素始终显示textarea元素中使用粘贴操作更新的内容,因此在步骤2和步骤3中所需的输出分别为foo
和foo foo
。
我设法获得所需输出的一种方法是将update()
函数调用延迟window.setTimeout()
,而不是
textareaElement.onpaste = update
我有
textareaElement.onpaste = function() {
window.setTimeout(update, 100);
};
这次(演示:http://jsfiddle.net/cwpLS/)。这就是我想要的。然而,这更像是一种解决方法,而不是一种直接的方式来做我想做的事情。我想知道是否有任何替代或更好的方法来做到这一点。
答案 0 :(得分:3)
我很确定你setTimeout解决方案是实现所需效果的唯一方法,或者尝试访问剪贴板对象 - 如果你要使用跨浏览器&amp; amp;旧的浏览器支持。
答案 1 :(得分:0)
在跨浏览器中没有直接的方法。请参阅以下链接,了解firefox中的行为。
目前没有以DOM方式获取正在粘贴的文本;你必须使用nsIClipboard来获取这些信息。
另请参阅讨论其他可能性的stackoverflow link。