WdatePicker时间改变事件(顺带解决有些浏览器下兼容性问题)

来源:互联网 发布:php 转为utf8 编辑:程序博客网 时间:2024/05/29 16:35

WdatePicker时间改变事件


首先,看代码: 

     <input id="starttime" type="text" size="17" name="starttime" onclick="WdatePicker({dateFmt:'yyyy-MM-dd',maxDate:'#F{$dp.$D(\'endtime\')}',minDate:'2011-06-01'})" 
  readonly="readonly" value="<s:property value='#starttime'/>" 
  onpropertychange="getstat()"/> 

   需求: 在做了时间修改之后,能自动的动态查询数据! 

   最初我使用的是:onchange事件,但经过测试发现,onchange事件,当你做出时间选择之后,你查询结果不会做任何改变的,原因就是:onchange事件要等到失去焦点才会激活。 

   后来我更换成了,onbulr事件,同样的没有达到我的要求,pass掉;换了 onkeyup(onkeyup 有一个弱点,就是当用户粘贴内容时不能"及时"被触发.其他onkeypress onkeydown 都有这样的不足),同样pass掉了,其实根本不用尝试就可以得出这个结论的,需求在那,跟粘贴无关那,遇到问题还是思路不够条理,先看清问题再解决也不迟,所以咱犯错误了,呵呵! 

   最后,查阅资料: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不会触发。
原创粉丝点击