我看到,当我在调用它的函数时尝试从 textarea 字段中读取值时onpaste
,我得到了该字段的旧值(粘贴操作之前的那个),而不是新值(粘贴操作之后的那个)。
这是此行为的演示: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 元素中更新的内容,因此所需的输出分别是步骤 2foo
和foo foo
步骤 3 中的和。
我设法获得所需输出的一种方法是使用延迟update()
函数调用window.setTimeout()
,所以而不是
textareaElement.onpaste = update
我有
textareaElement.onpaste = function() {
window.setTimeout(update, 100);
};
这次(演示:http: //jsfiddle.net/cwpLS/)。这就是我想要的。但是,这感觉更像是一种解决方法,而不是一种直接的方式来做我想做的事。我想知道是否有任何替代或更好的方法来做到这一点。