关于输入框事件监听

时间:2022-08-23 09:44:59

当输入框的值发生变化时,我们需要根据其值变化做出相应的判断,今天我自己的做项目的时候就遇到过这个问题。

需求是这样的:扫码枪扫描二维码,输入框内自动填入二维码,并且根据填入的二维码调用对应方法进行判断

刚开始我考虑onchange和oninput方法,两个方法的区别分别为:

onchange事件,必须对象的内容改变并且当前对象失去焦点(onblur)时候才会触发

oninput事件,对象内容改变就触发

对比这两种方法显然onchange方法不可行,于是我就使用oninput方法,写完后发现通过键盘输入是完全没有问题的,但是用扫码枪输入就不可行。于是我采用了下面这种方法:

        var start = new Date();
        var code = "";

        //扫码枪的输入事件,下面的兰姆达表达式IE不兼容,重写
        $(document).keypress(function(e) {
            var char = String.fromCharCode(e.keyCode);
            var now = new Date();
            if (now - start < 26) {
                code += char;
                var text = $('#pailCode').val();
                $('#pailCode').val(text + code);
                code = "";
                var value = $('#pailCode').val();
                if(value.length == 14){//如果二维码长度达到14位
                	textChange();//触发事件
                }
            } else if (now - start > 500) {
                $('#pailCode').val('');
                code = char;
            }
            start = now;
        });

这里主要思想是通过时间控制:扫码枪扫出二维码自动填入输入框其实就相当于键盘输入,只不过相比于键盘输入时间短很多,于是我就通过前后两个字符的输入时间间隔来判断,如果输入间隔小于26毫秒就填入输入框,到达14位时触发相应事件,当输入间隔大于500毫秒时,就认为是下一次扫码