[英]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.