刚遇到个问题,就是在 <input 中 绑定 WdatePicker 控件后, input 标签的 onchange 事件被屏蔽了,onchange方法是WdatePicker 的内置的方法,所以被屏蔽使用,没办法,只能使用其他的方法实现onchange功能.
最后,查阅资料:onpropertychange事件(onpropertychange能够捕获每次改,onpropertychange 事件被触发的机会就多了很多)只在对象(或元素)某一个property 被改变,这个事件都会随之触发,看,多好用的一个事件啊!不过还是存在问题呢!
onpropertychange 不被firefox所支持,如果想在firefox下正常使用,需要用oninput属性, 且需要用 addEventListener来注册事件。
利用IE的onpropertychange事件和在FF中具有同样效果的oninput事件,这两个事件用在<input type='text'>中就是来监视input标签的属性的变化,因为onpropertychange是IE的特有事件,所以首先还要判断浏览器的类型来选择给<input>标签增加相对应的事件监听,在 IE下给<input>添加onpropertychange事件监听,在FF下添加oninput事件监听,只要用户的输入值发生变化就会出发相应的事件,这样我就能随时取得用户输入如的值,进而进行动态过滤查询!
另外,attachEvent方法,为某一事件附加其它的处理事件。(不支持Mozilla系列)
addEventListener方法 用于 Mozilla系列
兼容性代码测试
var starttime= document.getElementByIdx_x("starttime");
if("\v"=="v") { //判断浏览器是否是IE
starttime.onpropertychange = times;
}else{
starttime.addEventListener("input",times,false);
}
function times(){
document.getElementByIdx_x('starttime').innerHTML=starttime.value;
}
总结
在文本框输入数据的时候,当键盘按下并放开的时候可以使用 onkeyup来检测事件;
可是有的时候就像我这次的需求,我们输入数据是采用粘贴的方式而不是键盘输入,这就需要实时检测文本框状态的改变。
onchange触发事件必须满足两个条件:
1、当前对象属性改变,并且是由键盘或鼠标事件激发的(脚本触发无效)
2、当前对象失去焦点(onblur);
简而言之:onchange需要执行某个事件才可以捕获。
onpropertychange的话,只要当前对象属性发生改变,都会触发事件,因此用途更为广泛,只可惜它是兼容IE ; 简而言之: onpropertychange能够捕获每次改变;
oninput是onpropertychange的非IE浏览器版本,支持 firefox和opera等浏览器,但有一点不同,它绑定于对象时,并非该对象所有属性改变都能触发事件,它只在对象value值发生改变时奏效。
attachEvent和addEventListener的区别!
attachEvent方法,为某一事件附加其它的处理事件。(不支持Mozilla系列)
addEventListener方法用于 Mozilla系列
oninput与onpropertychange失效的情况:
(1)oninput事件:a). 当脚本中改变value时,不会触发;b). 从浏览器的自动下拉提示中选取时,不会触发。
(2)onpropertychange事件:当input设置为disable=true后,onpropertychange不会触