如何在粘贴时获得文本区域输入字段的新值
How to get the new value of a textarea input field on paste?
我看到,当我试图在调用文本区域字段的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
复制到剪贴板 - 右键单击文本区域字段,然后选择"粘贴"。div元素中没有显示任何内容
- 右键单击文本区域字段,然后再次选择"粘贴"。
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/)。这是我想要的。然而,这感觉更像是一种变通方法,而不是一种简单的方式来做我想做的事情。我想知道是否有其他更好的方法。
我很确定,设置Timeout解决方案是实现所需效果的唯一方法,或者尝试访问剪贴板对象-如果你要跨浏览器&旧的浏览器支持。
在跨浏览器中没有直接的方法。请参阅下面关于firefox中行为的链接。
Mozilla
目前还没有DOM唯一的方法来获取正在粘贴的文本;你必须使用nsIClipboard才能获得这些信息。
此外,请查看stackoverflow链接,其中讨论了其他可能性。
相关文章:
- onkeyup无法动态创建多个文本区域
- 具有所有样式的文本正在复制到可编辑文本区域
- 在文本区域POST后解码JSON
- HTML文本区域文本到XML
- 阻止在文本区域/文本框中输入数字
- 使用 javascript 单击图片后更改<文本区域>文本
- 使用 javascript 检测文本区域/文本输入中的 HTML 标记,但它应该支持常见的>和<
- 在按 Tab 键时选择文本区域文本
- 切换文本区域文本,但保留对文本的更改
- 清除文本区域/文本框内容的按钮
- 加载页面时,聚焦并全选文本区域文本
- 如何使可编辑文本区域文本不可选择
- 我的文本区域文本是't用javascript将我想要的样式设置为CSS
- 使用jQuery将文本区域文本安全地存储在隐藏字段中,然后稍后在PHP中使用该文本
- 删除文本区域文本提交在新的选项卡
- 如何在添加新文本时保持文本区域文本静态
- 使用 jQuery 将文本区域文本设置为格式正确的 HTML 代码
- 为什么文本添加到区域文本是通过页面刷新,而不是直接刷新
- 使用 jquery 修改文本区域文本
- 如何使用Javascript在文本区域(文本框)中单击(光标闪烁)而不使用鼠标单击