前端坑多:使用js模擬按鍵輸入的踩坑記錄

曦遠發表於2021-03-12

一開始在Google搜尋了一番,找到了用jQuery的方案,程式碼量很少,看起來很美好很不錯,結果,根本沒用……

我反覆試了這幾個版本:

var e = $.Event('keyup')
e.keyCode = 49
$('#btn').trigger(e)
// 就是把 keycode 換成 which
$('#btn').trigger($.Event('keyup', { which: 49 }))

一點用都沒有……

然後又通過開發者除錯工具看 event listener,發現輸入框監聽了input事件,我就試試先設定input的value,然後jQuery模擬觸發事件能不能~

$('#btn').trigger('input')

結果也不行

解決

然後找到一個比較好的方法,使用js原生的InputEvent,如果是比較舊的Chrome,就用UIEvent代替,效果基本一樣。

程式碼如下

使用InputEvent

var dom = document.querySelector('#selector')
var evt = new InputEvent('input', {
    inputType: 'insertText',
    data: st,
    dataTransfer: null,
    isComposing: false
});
dom.value = '輸入的內容';
dom.dispatchEvent(evt);

使用UIEvent

var dom = document.querySelector('#selector')
var evt = new UIEvent('input', {
    bubbles: false,
    cancelable: false
});
dom.value = st;
dom.dispatchEvent(evt);

親測可以完美實現

可以自己封裝成函式比較方便呼叫,這部分程式碼就不貼了~

參考資料

歡迎交流

程式設計實驗室專注於網際網路熱門新技術探索與團隊敏捷開發實踐,在公眾號「程式設計實驗室」後臺回覆 linux、flutter、c#、netcore、android、kotlin、java、python 等可獲取相關技術文章和資料,同時有任何問題都可以在公眾號後臺留言~

相關文章