发布动态更改的文本区域值不适用于 ajax 表单

Posting a dynamically changed textarea value doesn't work with ajax forms

本文关键字:区域 文本 不适用 适用于 表单 ajax 布动态 动态      更新时间:2023-09-26

我正在开发一个浏览器扩展程序(谷歌浏览器和火狐浏览器),它使用内容脚本来更改文本区域值。我正在使用这个脚本:

在谷歌浏览器上,我使用这个脚本:

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)