JS对输入判断变化屏蔽中文输入法输入时连续触发事件的方法

代码如下:

 //智能搜索提示
    IntelligenceSearch: function IntelligenceSearch() {

        $('#keyWord').on('input', function () {
            if ($(this).prop('comStart')) return;    // 中文输入过程中不截断
            var url = $('#hKeyWord').val();
            var data = { keyword: $('#keyWord').val() };
            $('#words').html('');
            imcis.ajax(url, data, false, function (data) {
                var option = "";
                $.each(data, function (key, value) {
                    option += '<option value=' + value + '>';
                });
                $('#words').html(option);
                //alert('H');
            });
        }).on('compositionstart', function () {
            $(this).prop('comStart', true);
        }).on('compositionend', function () {
            $(this).prop('comStart', false);
        });
    }

HTML以及加载方法:

<input list="words" autocomplete="off" id="keyWord" style="font-size:12px;" type="text" placeholder="请输入关键字" />
                    <datalist id="words" style="background:red">

                        @*<option value="Internet Explorer">
                        <option value="Firefox">
                        <option value="Chrome">
                        <option value="Opera">
                        <option value="Safari">
                        <option value="Sogou">*@
                    </datalist>

采用H5的datalist去提示

 $(function () {
            MedicalCase.IntelligenceSearch();
        });

前台加载一下

 

 

具体的原理如下:

      $(function () {
                $('#text').on('input', function () {
                    if ($(this).prop('comStart')) return;    // 中文输入过程中不截断

                    var value = $(this).val();
                    console.log('当前输入:' + value);
                    //if (Str.byteLen(value, 3) > 24) {
                    //    $(this).val(Str.getMaxlen(value, 24));
                    //}
                }).on('compositionstart', function () {
                    $(this).prop('comStart', true);
                    console.log('中文输入:开始');
                }).on('compositionend', function () {
                    $(this).prop('comStart', false);
                    console.log('中文输入:结束');
                });
            })

开始和结束代表着事件的开始捕捉和结束捕捉

,这个做的更好一些能在后台加入缓存处理吗。还请大神指教

此外,中文输入法的keydown按出的keycode一直都会是229,在此科普一下

posted @ 2016-06-02 16:44  洛晨随风  阅读(1120)  评论(0编辑  收藏  举报