首页 > 技术文章 > Jquery Validate根据其他元素的事件来触发单个元素的异步校验

kcher90 2016-03-14 11:51 原文

场景:在做一个车辆信息管理模块,而车牌是通过车牌颜色和车牌号码来确定唯一性的,录入车牌信息时需对车牌进行唯一性校验。

对车牌号的异步校验规则

 1 rules:{
 2             plateNumber:{
 3                 remote:{
 4                     url:'${ctx}/bu/vehicleInfo/checkPlateNumUniqueness',
 5                     data:{
 6                         plateNumber:function(){
 7                             return $("#plateNumber").val();
 8                         },
 9                         plateColor:function(){
10                             return $("#plateColor").val();
11                         }
12                     }
13                 }
14             }
15         },
16         messages:{
17             plateNumber:{
18                 remote:'已存在相同车牌号码'
19             }
20         }

车牌颜色变动的时候通过触发车牌号码的校验规则来对唯一性进行校验

$("#plateColor").change(function() {
    //由于是根据车牌号码和车牌颜色来判断车牌号唯一性的,故车牌颜色改变时也应该校验车牌号唯一性
    $("#plateNumber").removeData('previousValue');
    var plateNum = $("#plateNumber").val();
    if (plateNum != '') {
        $("#plateNumber").removeData('previousValue');
        validator.element($("#plateNumber"));
    }
});

这里遇到了一个问题,就是车牌颜色变动过一次触发了唯一性校验之后,再去变动车牌颜色就无法再次触发唯一性校验了,

后来在这里找到了答案(http://stackoverflow.com/questions/2710548/how-do-i-use-jquery-validate-remote-validation-on-a-field-that-depends-on-anothe)

原因是触发了一次之后会有缓存,需要调用这removeData方法先把缓存清理掉才能再次触发。

推荐阅读