获取不到input的最新值

做了正则校验,只能输入数字和小数点的input框

复现步骤:
①正常输入,失去焦点时获取的值是对的

img

②输入了特殊字符(比如 @、#、~、%,因为输入框已经做了正则检验不可输入特殊字符,所以即使输入了也不会显示,但是造成了获取不到输入框里的最新值的bug)

img

代码:

img

oninput中不应该是item.right_model吗,value是哪来的?

有没有 js 的处理代码,觉得跟这个也有关系。

  • 以下回答由chatgpt基于相关博客总结生成:

    对于这个问题,我理解的是在进行正则校验后,输入框中输入了特殊字符导致获取不到输入框中的最新值。解决这个问题,可以通过两个方法:

    1. 使用addOnInputListener监听输入框的输入事件,在监听事件中进行字符替换过滤。具体的代码实现如下:
    editText.addOnInputListener(new EditText.OnInputEventListener() {
        @Override
        public void onInputEvent(EditText view, Editable input) {
            // 获取输入框中的文本内容
            String content = input.toString();
            // 判断是否含有特殊字符
            if (content.matches("[^0-9.]")) {
                // 如果有特殊字符,将其替换为""
                input.replace(0, input.length(), content.replaceAll("[^0-9.]", ""));
            }
        }
    });
    
    1. 在进行正则校验之前,先通过InputFilter对输入框内容进行过滤。具体的代码实现如下:
    InputFilter filter = new InputFilter() {
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            // 遍历每一个字符,如果是数字或小数点,就返回该字符
            for (int i = start; i < end; i++) {
                char c = source.charAt(i);
                if (!Character.isDigit(c) && c != '.') {
                    // 如果是特殊字符,就返回空字符""
                    return "";
                }
            }
            // 如果没有特殊字符,就返回原字符
            return source;
        }
    };
    // 将该过滤器设置给EditText
    editText.setFilters(new InputFilter[]{filter});
    

    以上两种方法都能够解决这个问题,具体使用哪种方法可以根据实际场景进行选择。