【问题标题】:Javascript oninput: How to prevent firing on blur (mobile)?Javascript oninput:如何防止在模糊(移动)上触发?
【发布时间】:2025-12-27 02:25:09
【问题描述】:

我遇到了一个令人沮丧的问题。 inputchange 事件有不同的用途:

  • input 应该在每次元素值更改时触发
  • change 应该在元素失去焦点时触发,如果值改变了

这是我在移动设备(Android Chrome)上测试时看到的行为,除了。在移动设备上,input 事件会在两种情况下触发:每次发生变化时,失去焦点时。

Here's a JSFiddle to test,还有一个例子:

<input id="input" type="text" />
<script>
    // On mobile, this will fire an extra time when the input loses focus!
    document.getElementById('input').addEventListener('input', console.log);
</script>

这与我想要的组件行为相冲突,而且我没有太多运气摆脱它。它在blurchange 事件之前被触发,所以我无法在那里阻止它,而且我在事件本身中没有发现任何可以将它与定期input 活动。有人有想法吗?

我正在 Android Chrome 56.0.2924.87 上进行测试,如果其他移动浏览器上有类似行为,我非常感谢反馈。

【问题讨论】:

    标签: javascript mobile input


    【解决方案1】:

    您可能需要做的是将lastValue 存储在一个数组中,然后根据lastValue 检查当前值,只有在存在差异时才进行处理。

    let lastValue = null;
    document.getElementById('input').addEventListener('input', () => {
        if (this.value === lastValue) {
            return; // do nothing
        }
    
        lastValue = this.value;
        // do something
    });
    

    【讨论】: