美文网首页
input 事件兼容 以及 中文输入优化

input 事件兼容 以及 中文输入优化

作者: MuLuo丶 | 来源:发表于2017-04-11 18:37 被阅读0次

    bug

    ios 输入中文时 会触发多次input事件

    解决方法

    引入两个事件compositionstartcompositionend

    compositionstart

    该事件在用户开始进行非直接输入的时候触发,而在非直接输入结束。

    compositionend

    该事件在用户 输入完成 点击候选词 或 确认按钮时 触发

    var inputLock = false;
    function do(inputElement) {
        var regex = /[^1-9a-zA-Z]/g;
        inputElement.value = inputElement.value.replace(regex, '');
    }
    
    inputElement.addEventListener('compositionstart', function() {
      inputLock = true;
    });
    
    
    inputElement.addEventListener('compositionend', function(event) {
      inputLock = false;
      do(event.target);
    })
    
    
    inputElement.addEventListener('input', function(event) {
      if (!inputLock) {
        do(event.target);
        event.returnValue = false;
      }
    });
    

    添加一个 inputLock 变量,当用户未完成直接输入前,inputLock 为 true,不触发 input 事件中的逻辑,当用户完成有效输入之后,inputLock 设置为 false,触发 input 事件的逻辑。这里需要注意的一点是,compositionend 事件是在 input 事件后触发的,所以在 compositionend事件触发时,也要调用 input 事件处理逻辑。

    相关文章

      网友评论

          本文标题:input 事件兼容 以及 中文输入优化

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