发布动态更改的文本区域值不适用于 ajax 表单
Posting a dynamically changed textarea value doesn't work with ajax forms
我正在开发一个浏览器扩展程序(谷歌浏览器和火狐浏览器),它使用内容脚本来更改文本区域值。我正在使用这个脚本:
在谷歌浏览器上,我使用这个脚本:
function print(msg, textarea){
textarea.focus();
textarea.click();
textarea.value = '';
for(var i=0; i<msg.length;i++){
var e = document.createEvent('KeyboardEvent');
e.initKeyboardEvent("keypress", true, true, null, false, false, false, false, 0, msg.charCodeAt(i));
textarea.dispatchEvent(e);
textarea.value += msg[i];
}
}
在一些使用 AJAX 的网站上,文本区域的值已正确更新,但由于某些原因,当我提交表单时,会发布旧的文本区域内容。如果我手动按一个键,问题就解决了。
我不明白问题出在哪里。我尝试了$(textarea).keydown().keypress().keyup().change()或.blur()与jQuery,但它没有帮助。
弗拉基米尔是对的,问题通常是关于隐藏字段和 keyup 事件。触发顺序是关键。我认为正确的方法是:
for(var i=0; i<msg.length;i++){
var e = document.createEvent('KeyboardEvent');
e.initKeyboardEvent("keydown", true, true, null, false, false, false, false, 0, msg.charCodeAt(i));
textarea.dispatchEvent(e);
var e = document.createEvent('KeyboardEvent');
e.initKeyboardEvent("keypress", true, true, null, false, false, false, false, 0, msg.charCodeAt(i));
textarea.dispatchEvent(e);
textarea.value += msg[i];
var e = document.createEvent('KeyboardEvent');
e.initKeyboardEvent("keyup", true, true, null, false, false, false, false, 0, msg.charCodeAt(i));
textarea.dispatchEvent(e);
}
它适用于Firefox和google chrome(但Firefox使用initKeyEvent而不是initKeyboardEvent)
相关文章:
- onkeyup无法动态创建多个文本区域
- 具有所有样式的文本正在复制到可编辑文本区域
- 在文本区域POST后解码JSON
- HTML文本区域文本到XML
- 阻止在文本区域/文本框中输入数字
- 使用 javascript 单击图片后更改<文本区域>文本
- 使用 javascript 检测文本区域/文本输入中的 HTML 标记,但它应该支持常见的>和<
- 在按 Tab 键时选择文本区域文本
- 切换文本区域文本,但保留对文本的更改
- 清除文本区域/文本框内容的按钮
- 加载页面时,聚焦并全选文本区域文本
- 如何使可编辑文本区域文本不可选择
- 我的文本区域文本是't用javascript将我想要的样式设置为CSS
- 使用jQuery将文本区域文本安全地存储在隐藏字段中,然后稍后在PHP中使用该文本
- 删除文本区域文本提交在新的选项卡
- 如何在添加新文本时保持文本区域文本静态
- 使用 jQuery 将文本区域文本设置为格式正确的 HTML 代码
- 为什么文本添加到区域文本是通过页面刷新,而不是直接刷新
- 使用 jquery 修改文本区域文本
- 如何使用Javascript在文本区域(文本框)中单击(光标闪烁)而不使用鼠标单击