會碰到這個問題一般是想×別人的網頁導致的,一般來說想控制別人寫的網頁(或者維護一份別人的網頁代碼)碰到需要用JS給input或者select之類的組件賦值的時候一般會直接這樣寫:
let casess=document.getElementsByClassName('xxxxx')[0]; casess.value='50';
賦值后點擊有時候會報錯有時候不會,一般報錯的情況基本上屬於這份代碼用了某些前端框架,例如Vue之類的,Vue的input弄個雙向綁定啥的,此時我們用原生的JS企圖去控制輸入框的值就會出現無效的情況(明明input上有數字或者字符但是點擊按鈕就是說你沒填內容)。因為此時只是修改了value屬性,沒有觸發input或change事件,導致輸入沒有最終確定。input和change事件默認情況下(作者設計的時候),只有當接收到鍵盤的按鍵(隨便哪個鍵盤的按鍵消息),就會觸發input和change事件,進而把輸入框中的value賦值給預設的相關變量,到這一步才算走完整個設置value的過程。所以如果想給這類加料的輸入框或者選擇框用原生JS賦值,設置vlaue屬性過后就必須手動觸發一下input或change事件。下面是例子:
input的例子:
let casess=document.getElementsByClassName('input_amo')[0]; //input_amo -- 是input的類 casess.value='50'; var event = document.createEvent('HTMLEvents'); event.initEvent("input", true, true); var eve3nt = document.createEvent('HTMLEvents'); eve3nt.initEvent("blur", true, true); event.eventType = 'message'; casess.dispatchEvent(event); casess.dispatchEvent(eve3nt);
如果是select選擇框把"input"改成"change"即可,更多信息請看參考資料。
參考資料:https://blog.csdn.net/russle/article/details/67637500
轉載自:https://blog.csdn.net/l198738655/article/details/107026783/