美文网首页
如何将用户输入的小写字母实时转换为大写字母

如何将用户输入的小写字母实时转换为大写字母

作者: zbqsfs | 来源:发表于2017-12-22 16:08 被阅读0次

    最近项目中遇到的一个需求,要求用户输入车牌号,并且要求车牌号只能为大写字母,想了想觉得很简单,刷刷刷就写好了:

    <input type="text" id="input" />
    <script type="text/javascript">
        document.getElementById("input").addEventListener("input",function(e) {
            this.value = this.value.toUpperCase();
        })
    </script>
    

    测试了一下也没什么问题,于是就提交了,可是没多久测试就发现了问题:因为是车牌号所以要输入中文,但是微软拼音输入法在输入中文时会先在输入框中显示拼音,然后就被转换成了大写字母,导致输入的中文前面总是会出现大写的拼音字母.
    查了一下发现了三个用于IME输入序列的事件:
    compositionstart:要开始输入;
    compositionupdate:插入新字符;
    compositionend:复合系统关闭,返回正常键盘输入状态;
    测试了一下compositionstart事件在input事件之前触发,然后问题就好解决了:

    <input type="text" id="input" />
    <script type="text/javascript">
        document.getElementById("input").addEventListener("compositionstart",function(e) {
            this.compositing = true; //给触发事件的input对象添加compositing属性并设为true,表明正在进行中文输入
        })
        document.getElementById("input").addEventListener("compositionend",function(e) {
            this.compositing = false; //结束中文输入
        })
        document.getElementById("input").addEventListener("input",function(e) {
            !this.compositing && (this.value = this.value.toUpperCase()); //不在中文输入状态时才进行转换
        })
    </script>
    

    测试了一下,问题解决.

    相关文章

      网友评论

          本文标题:如何将用户输入的小写字母实时转换为大写字母

          本文链接:https://www.haomeiwen.com/subject/cdxxgxtx.html