0

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

如果您在最新的 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” 截屏

编辑 2: 看起来这段代码在苹果移动设备上引起了问题——当点击键盘提示时,这些提示没有被使用。一个临时的解决方案是在输入事件中使用过滤(替换),并使用大写 - 通过 focusout 或通过 css(文本转换:大写)和服务器上的进一步转换

4

0 回答 0