Bug - 文本框oninput事件,在中文輸入法狀態多次觸發


在中文輸入法狀態中,還在檢索拼音,這時事件就會觸發,這不是我們想要的,xiaoqiu x,xi,xia,xiao....都會觸發,這樣頻繁的請求會給接口造成挺大壓力的。

我們可以使用js里面防抖動的方式或DOM3的復合事件來解決此問題。

回顧一下onchange和input事件:

     oninput事件在<input>或<textarea>元素的值發生改變時觸發

onchange事件也是監聽文本框變化后觸發,不同的是oninput事件是立即(即時)觸發,onchange則是在元素失去焦點時觸發

onchange的觸發頻率僅次於oninput事件

使用DOM3以下三種復合事件:
1、compositionstart:官方解釋,觸發於一段文字的輸入之前,也就是在輸入一段需要的文本(第一個字母開始)或語音開始輸入時會觸發。
2、compositionupdate訪問data:正插入的新字符;
3、compositionend訪問data:插入的所有字符;

文本框會填入 “虛擬文本”(待確認文本),同時觸發input事件;在觸發compositionend時,就是填入實際內容后(已確認文本)。

js代碼:


var flag = true;
$('#id').on('compositionstart',function(){
flag = false;
})
$('#id').on('compositionend',function(){
flag = true;
})
$('#id').on('input',function(){
setTimeout(function(){
if(flag){
console.log(1);
}
},0)
})
最終理想效果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM