在中文輸入法狀態中,還在檢索拼音,這時事件就會觸發,這不是我們想要的,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)
})
最終理想效果: