簡體   English   中英

發布動態更改的textarea值不適用於Ajax表單

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

我正在開發一個瀏覽器擴展程序(谷歌瀏覽器和Firefox),該擴展程序使用內容腳本更改了textarea值。 我正在使用此腳本:

在谷歌瀏覽器上,我使用以下腳本:

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的值已正確更新,但是由於某些原因,當我提交表單時,會改為發布舊的textarea內容。 如果我手動按一個鍵,問題就解決了。

我不明白問題出在哪里。 我嘗試使用jQuery $(textarea).keydown()。keypress()。keyup()。change()或.blur(),但沒有幫助。

弗拉基米爾(Wladimir)是對的,問題通常與隱藏字段和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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM