日期:2014-05-16  浏览次数:20468 次

JS输入框onchange事件无效的问题
一个输入框:<INPUT maxLength=20 name=fBindCard value="3" onchange="alert('test');" onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')"/>
即加了只能输入数字的控制的输入框,不能触发onchange事件。
这是什么原因?

------解决方案--------------------
好像是不行,建议onchange函数里的事情写在onkeyup和onafterpaste中去。
------解决方案--------------------
我测试应该是 onkeyup="this.value=this.value.replace(/\D/g,'') 这句话的关系。

因为首先执行的是 onkeyup事件 这句话是把非数字形的值 删除掉 在付值给 文本框。。

所以无论你怎么写 最后执行 onchange事件都是不会执行的,这个时候文本框已经出于不改变状态。

我这个理解不知道对不对!

所以他不会执行 onchange事件!

------解决方案--------------------
在改变字符并且失去焦点的时候才触发onchange
------解决方案--------------------
1.用js改变input的值,不会触发onchange;
2.在IE里,楼主想要的代码可能是这样的:<INPUT maxLength=20 name=fBindCard value="3" onchange="alert('test');" onkeyup="this.createTextRange().text=this.value.replace(/\D/g,'')" /> 
3.楼主的代码会打乱用户的光标,建议这样的验证写在onblur里。
------解决方案--------------------
onchange只有在onblur的时候才会执行
另外js修改值不触发onchange事件,建议,你在赋值之后手工执行onchange中的方法
------解决方案--------------------
onpropertychange只支持IE,在FOXFIRE下还不知道怎么解决呢