2013-10-25 53 views
1

我有這個驗證功能:jQuery驗證插件,if語句

var validator =$('#form1').validate({ 
    ignore: "", 
    rules: { 
     usu_login: { required: true }, 
     usu_email: { required: true }, 
     usu_nombre1: { required: true }, 
     usu_apellido1: { required: true }, 
     usu_fecha_nac: { required: true }, 
     usu_cedula: { required: true }, 
     usu_telefono1: { required: true }, 
     usu_password: { 
      required: function() { return focusout == true; } 
     }, 
     usu_password2: { 
      required: function() { return focusout == true; } 
     }, 
     usu_password3: { 
      required: function() { return focusout == true; }, 
      equalTo: "#usu_password2" 
     } 
    } 
} 

我需要將相同的if聲明中equalTo功能,所以這可以作爲我想,但我不知道該怎麼要做到這一點。

有誰知道嗎?由於

+3

什麼'if'語句? –

+0

'required:function(){return focusout == true; }'這就像一個if在validate插件@RoryMcCrossan –

+0

'equalTo'只能帶一個字符串選擇器。 –

回答

2

解決方法是使用depends屬性的規則!

jQuery(function ($) { 

    var focusout; 
    $('#state').change(function(){ 
     focusout = this.checked; 
    }).change(); 

    var validator = $('#myform').validate({ 
     ignore: "", 
     rules: { 
      usu_login: { 
       required: true 
      }, 
      usu_email: { 
       required: true 
      }, 
      usu_nombre1: { 
       required: true 
      }, 
      usu_apellido1: { 
       required: true 
      }, 
      usu_fecha_nac: { 
       required: true 
      }, 
      usu_cedula: { 
       required: true 
      }, 
      usu_telefono1: { 
       required: true 
      }, 
      usu_password: { 
       required: function() { 
        return focusout == true; 
       } 
      }, 
      usu_password2: { 
       required: function() { 
        return focusout == true; 
       } 
      }, 
      usu_password3: { 
       required: function() { 
        return focusout == true; 
       }, 
       equalTo: { 
        depends: function(){ 
         return focusout == true; 
        }, 
        param: "#usu_password2" 
       } 
      } 
     }, 
     messages: {} 
    }); 
}); 

演示:Fiddle

+0

謝謝你的工作! –

+0

我可以問你一個問題嗎?我將如何做minlenght驗證相同?與取決功能呢?謝謝@ArunPJohny –

0

你可以試試這個:

var rules = { 
    usu_login: { required: true }, 
    usu_email: { required: true }, 
    usu_nombre1: { required: true }, 
    usu_apellido1: { required: true }, 
    usu_fecha_nac: { required: true }, 
    usu_cedula: { required: true }, 
    usu_telefono1: { required: true }, 
    usu_password: { 
     required: function() { return focusout == true; } 
    }, 
    usu_password2: { 
     required: function() { return focusout == true; } 
    }, 
    usu_password3: { 
     required: function() { return focusout == true; }, 
     equalTo: "#usu_password2" 
    } 
} 

if (!focusout) { 
    for (key in rules) { 
     delete rules[key].equalTo; 
    } 
} 

var validator = $('#form1').validate({ 
    ignore: "", 
    rules: rules 
}); 

在所有規則的循環迭代,並刪除equalTo約束,如果它應該被忽略。

但是,每次更改focusout時都必須重新創建validator對象。

+0

我試了一下,謝謝,但它不起作用,因爲那個字段usu_password3是在一個模式中,並且即使它的equealTo NULL,它的期望輸入出現,並沒有出現,因爲它在模態內。 –

+0

我將它改爲'delete',它完全擺脫了'equalTo'屬性,就好像它從不存在一樣。 BUUE Aurun的答案是更好的答案。 – Yogu

0
你的情況,你必須添加

自己的方法來驗證

$.validator.addMethod("mehod", function(value, element) 
{ 
valid=false; 
if(condition==true)//place your condition 
{ 
valid=true; 
} 
else 
{ 
valid=false; 
} 
return this.optional(element) || valid; 
},"Your own error message"); 

,並把它放在你想驗證

這樣的:

rules: { 
usu_login: { required: true,method: true },//here you are using your method 
usu_email: { required: true } 
/*other rule*/ 
} 

這適用於我的情況。