2013-06-27 169 views
4

在自定義驗證方法中,我想調用minLength驗證方法。Jquery驗證:在另一種方法內調用驗證方法

我已經試過這樣:

$.validator.addMethod("myMethod", function (value, element, params) { 
    var minLengthResult = $.validator.methods.minlength.call(this, value, element); 
    if(minLengthResult === false) { 
     return true; 
    } 

    // check the value 
}); 

但是,如果我調試驗證MINLENGTH方法的參數對象是不確定的,而函數總是返回false。

// http://docs.jquery.com/Plugins/Validation/Methods/minlength 
minlength: function(value, element, param) { 
    // param is undefined if i call this function using 
    // $.validator.methods.minlength.call() 

    var length = $.isArray(value) ? value.length : this.getLength($.trim(value), element); 
    return this.optional(element) || length >= param; 
}, 

是否有任何方式調用驗證方法,並提供所需的參數?

回答

0

也許並不完全是你在找什麼,但我總是使用自定義片段來驗證表單。在這個例子中無效的字段的標題屬性設置爲錯誤信息,這樣就可以顯示例如jQuery的醉意:

var validation = { 
    name: [/.+/i, 2, 90, "Invalid naam", true, "Name"], 
    email: [/^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$/i, 0, 150, "Invalid email",  true, "Email"] 
} 

要調用驗證:

$("#form").submit(function(e) { 
    e.preventDefault();  

    //validation 
    var error = false; 
    $(this).find("input").each(function() { 
     var field = $(this).attr("name"); 
     var val = $(this).val(); 

     if(validation[field]) { 
      $(this).removeClass("error"); //clear previous errors 

     //invalid 
      if(!val.match(validation[field][0]) && val) 
       error = [field, validation[field][3]]; 

      //too short 
      if(val.length < validation[field][1] && val) 
       error = [field, validation[field][5] + " requires at least " + validation[field][1] + " characters"]; 

      //too long 
      if(val.length > validation[field][2] && val) 
       error = [field, validation[field][5] + " has a maximum of " + validation[field][2] + " characters"]; 

      //missing 
      if(!val && validation[field][4]) 
       error = [field, validation[field][5] + " is required"]; 
     } 

     if(error) 
      return false; 
    }); 

    //errors? 
    if(error) { 
     $(this).find("input[name=" + error[0] + "]").addClass("error").focus().attr("title", error[1]); 
     return false; 
    } 

    //submit form! Everything is valid 
}); 
+0

這裏是一個鏈接一個工作小提琴:http://jsfiddle.net/Tumtum/4bQtm/ – Tumtum

+1

這可能工作,但不能解決問題。我想適當地使用jquery unobtrusive驗證插件。 – Catalin