我正在尝试删除无效字符并将它们转换为大写;
如果您在最新的 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(文本转换:大写)和服务器上的进一步转换