Inputテキストボックスは英語入力時に自動的にイベントをトリガーし、中国語入力時に入力が完了してからイベントをトリガーする

936 ワード

必要:
英語(英語入力法):アルファベットを入力するたびにイベントがトリガーされます.
日文(ピンイン入力法):入力が完了するとイベントがトリガーされ、ピンインを打つたびにトリガーされるわけではありません
実装:
$(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:入力開始時にトリガー
compositionand:選択語/語の入力完了時にトリガー
直接英語に負けるのはcompositionstart,compositionndイベントをトリガーしないので、最初の標識flagがtrueになってから後ろのsearchRegion()メソッドに進みます.
中国語を入力場合はcompositionstart,compositionndを組み合わせて入力完了状況を判断して後ろのsearchRegion()メソッドを歩かないことを決定する.
ここで加算遅延settimeoutは、デフォルトではinputがcompostionendより先に実行するため、flagの識別が不正確になる.