为什么输入事件运行两次并在Firefox for Android中显示先前的值?

问题描述

我正在尝试删除无效字符并将其转换为大写;

如果您在最新的Firefox for Android上运行代码,则将触发输入事件两次,并且输入值将重复。

但是,如果您删除了任何操作(toupperCase或替换),问题就会消失。

测试案例一(有问题)

var input = document.getElementById("a");
input.addEventListener("input",()=>{
    //input.value = input.value.toupperCase();
  //input.value = input.value.replace(/[^A-Z]/gi);
  input.value = input.value.toupperCase().replace(/[^A-Z]/gi,'');

  console.log("event");
});
<input id="a" type="text">

测试案例二(无问题)

var input = document.getElementById("a");
input.addEventListener("input",()=>{
    //input.value = input.value.toupperCase();
  input.value = input.value.replace(/[^A-Z]/gi,'');
  //input.value = input.value.toupperCase().replace(/[^A-Z]/gi,'');

  console.log("event");
});
<input id="a" type="text">

该行为是什么原因以及如何解决

编辑: 萤幕撷取画面清晰。我输入了“ ABC”

Screenshot

编辑2: 看起来这段代码在Apple移动设备上引起了问题-单击键盘提示时,未使用这些提示。 临时的解决方案是在输入事件时使用过滤(替换),并使用大写字母-通过焦点输出或通过CSS(文本转换:大写字母)并在服务器上进行进一步的转换

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)