当输入框的值发生变化时,我们需要根据其值变化做出相应的判断,今天我自己的做项目的时候就遇到过这个问题。
需求是这样的:扫码枪扫描二维码,输入框内自动填入二维码,并且根据填入的二维码调用对应方法进行判断
刚开始我考虑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毫秒时,就认为是下一次扫码