input输入框输入中文时,监听的input事件怎样屏蔽拼音状态

在input输入框输入中文时,需要即时查询出匹配输入内容的结果,一般我们会使用input事件监听用户输入事件,但是在输入汉语拼音时,也会触发input事件,前端就会不断发送请求,用户体验非常差劲。
针对这种情况,笔者给大家介绍一个简单易懂的好方法。

代码如下:

var cpLock = false;
$('#search-input').on('compositionstart', function () {
    cpLock = true;
});
$('#search-input').on('compositionend', function () {
    cpLock = false;
});
$('#search-input').on('input', function () {
    if (!cpLock) {
        // TODO
    }
});
````
#### 原理:
当浏览器有非直接的文字输入时, compositionstart事件会以同步模式触发.
当浏览器是直接的文字输入时, compositionend会以同步模式触发.
当元素监听到compositionstart事件,给input中事件加锁,禁止input中事件执行,当元素监听到compositionend事件,给input中事件解锁,正常执行。

将以上内容形成插件:
compositionEvent.js
````
var compositionEvent = {
    init: function(){
        this.compositionEventName = true;
        this.bindEvents();
    },
    bindEvents: function(){
        var self = this;
        $(document).on('compositionstart', function() {
            self.compositionEventName = false;
        });
        $(document).on('compositionend', function() {
            self.compositionEventName = true;
        });
    }
};
compositionEvent.init();
````
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,107评论 19 139
  • 总结: 鼠标事件 1.click与dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r阅读 1,653评论 2 10
  • 第1章 鼠标事件 1-1 jQuery鼠标事件之click与dbclick事件 用交互操作中,最简单直接的操作就是...
    mo默22阅读 1,310评论 0 6
  • 忽一日,遽感眼部不适,未引以为意。翌日,不适感加剧,眼珠通红,竟至于数日未愈。或因烟酒过量,三焦热炽,爆发...
    唯一还是我阅读 263评论 7 25
  • 经历了社会十余年,所有的一切看得很淡,淡淡地享受独有的幸福,明白健康才是生活的真谛。做到心中有即可,对于阶级...
    a戎闻阅读 266评论 0 0