需求:
英文(英文输入法): 每输入一个字母都触发一次事件;
中文(拼音输入法): 输入完成后才触发事件,不是每打一个拼音就触发
实现:
$(function(){
var flag = true;
$('#dev_region_search').on('compositionstart',function(){
flag = false;
});
$('#dev_region_search').on('compositionend',function(){
flag = true;
});
$('#dev_region_search').on('input',function(){
setTimeout(function(){
if(flag){
searchRegion();
}
},0);
});
});
思路:
compositionstart: 输入开始时触发
compositionend: 选择字/词完成输入时触发
而直接输英文是不触发compositionstart,compositionend事件的,所以开始的标识flag为true才会走后面的searchRegion()方法,
输入中文的则结合compositionstart,compositionend来判断输入完成情况决定走不走后面的searchRegion()方法.
这里加的延时setTimeout是因为默认情况下input比compostionend先执行了,导致flag标识不准确.