1. 程式人生 > >Jquery Validate根據其他元素的事件來觸發單個元素的非同步校驗

Jquery Validate根據其他元素的事件來觸發單個元素的非同步校驗

場景:在做一個車輛資訊管理模組,而車牌是通過車牌顏色和車牌號碼來確定唯一性的,錄入車牌資訊時需對車牌進行唯一性校驗。

對車牌號的非同步校驗規則

複製程式碼
 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方法先把快取清理掉才能再次觸發。