`
yutian2211
  • 浏览: 24501 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

validator 和 datepicker同时使用时的小Bug

阅读更多
最近的一个项目中做一个验证,组长要求是用Jquery.validator来做,一开始不怎么会这个,后来看看他给一个Demo,就差不多了!
后面页面差不多做好的时候,发现了一个小问题:一个使用datepicker的文本框上,点击过后,里面的数据得不到立即的验证,开始怎么搞都不行,后来我在代码处加了alert,然后发现了他的运行流程:
引用
input.date 得到焦点--弹出UI.datepicker--点击选择日期--将值给input.date

这个其中input.date 的焦点情况是:得到--失去,也就是说,你在弹出datepicker的UI的时候,焦点就已经失去了,可是validator是在blur的时候,就开始验证了,那个时候,input.date的值还是前一个的值,所以验证是前一个的值,新改的值的得不到立即验证,所以给人的UI很不友好!
后来,怎么解决呢?有两个思路:1,一个是用onchange事件监控input.date的value改变,改变以后call下valiation,这种方法要再重写一个validation的funciton;2,可不可以让他选择了日期以后,再让input.date再来一个获取焦点,失去焦点的操作,这样就可以触发onblur事件了,然后就validation……
和组长讨论了一下,第一种方法被他否决了,他认为这种再写一个function,会破坏页面结构,除非我能直接call jquery.validation的rules中的一个规则,不过我没有找到这个方法,不知道大家有吗?拿出来共享下……
所以只好采用第二种方法:开始是这样想的,在规则下面再加一行红色的
  rules:{
               birthDate: {
                    isLessThanTodayDate:true,
                    //焦点得到,失去方法
                    focusGetLost:true
                },

当时没想到,这个规则也是在blur下执行的,不可能在选择了日期后再执行,测试了以后,失败,不过,这也提供了一个思路,就是要找在日期选择了以后,再执行的方法。。。
于是google 百度下好长时间,终于发现了:datepicker的onSelect,呵呵,这是在选择了以后,执行的方法,于是,我在加上了以下代码 :
  $("input.date").datepicker({ 
        dateFormat: 'yy-mm-dd',
        onSelect:function(date){
            this.focus();
            this.blur();
        }
    });


于是,问题解决了,呵呵!当时好高兴,现在趁着记忆写下来。

datepicker还有一个方法onClose,在datepicker的UI消失后,执行的方法,估计也是可以,不过我没有测试……
1
0
分享到:
评论
2 楼 yutian2211 2010-08-11  
waiting 写道
所以要多看官网的demo,里面有详细的调用、方法、事件。
楼主这个属于找个datapicker的回调函数来执行验证。

呵呵,谢谢提醒,我也刚接触这个插件,今天又发现了一个方法:$("#mainForm").validator().element("#元素ID")来call单个的验证,呵呵,不过没有这个方便
1 楼 waiting 2010-08-11  
所以要多看官网的demo,里面有详细的调用、方法、事件。
楼主这个属于找个datapicker的回调函数来执行验证。

相关推荐

Global site tag (gtag.js) - Google Analytics