2014-04-11 16 views
6

Tôi muốn sử dụng jQuery Validate để xác thực tuổi là giữa hai năm trong thẻ siêu dữ liệu và chỉ định năm làm tham số.jQuery Xác thực trình xác thực tùy chỉnh với nhiều thông số trong thẻ siêu dữ liệu và thông báo

Vấn đề tôi có là tôi không thể chuyển các tham số dưới dạng đối tượng vì vậy tôi không biết cách truy cập chúng trong thông báo lỗi (và không thể tìm thấy bất kỳ tài liệu nào về nó).

HTML

<input type="text" name="dob" id="dob" validAge="[17,66]" /> 


Javascript

jQuery.validator.addMethod('validAge', function (value, element, params) { 
     value = eLifeViewModel.age(); 
     if (value === '') { 
      return false; 
     } 
     var range = JSON.parse(params); 
     return value > range[0] && value < range[1]; 
    }, $.format('Applicants must be older than {0} and younger than {1} years of age')); 


Kết quả cho {0} là chuỗi tham số của tôi và {1} là HTTPInputElement.


Tôi hiện đã viết một hàm minAge và maxAge để giải quyết vấn đề này, nhưng tôi vẫn muốn có giải pháp cho vấn đề này.

Trả lời

1

Bạn không thể tìm tài liệu, bởi vì bạn không thể làm điều đó.

Sử dụng plugin Xác thực jQuery và phương thức tùy chỉnh, bạn không thể khai báo quy tắc nội tuyến validAge khi bạn cần chuyển tham số.

<input type="text" name="dob" id="dob" validAge="[17,66]" /> 

Chỉ một số quy tắc mà có thể được khai báo với một boolean (có thể được khai báo là class tên), hoặc quy tắc mà còn là HTML5 thuộc tính xác nhận có thể được khai báo inline.

Đối với phương pháp tùy chỉnh của bạn với các thông số, nó phải được khai báo bên trong phương thức .validate() ...

$('#myform').validate({ 
    // your options, rules, etc, 
    rules: { 
     dob: { 
      validAge: [17,66] 
     } 
    } 
}); 
+0

Nghĩ rằng đây sẽ là trường hợp. Cám ơn vì đã xác nhận. – Delorian

+2

Có vẻ như điều này thực tế hoạt động trong phiên bản mới nhất: http://jsfiddle.net/jbubriski/YQgEq/119/ –

1

Biến số params không trả về chuỗi nhưng là đối tượng.

Cố gắng vượt qua phạm vi trực tiếp từ params:

jQuery.validator.addMethod('validAge', function (value, element, params) { 
     value = eLifeViewModel.age(); 
     if (value === '') { 
      return false; 
     } 
     return value > params[0] && value < params[1]; 
    }, $.format('Applicants must be older than {0} and younger than {1} years of age')); 
+0

Cảm ơn NMC, là có cách nào tôi có thể làm điều đó từ các thẻ siêu dữ liệu HTML? Liệu giá trị luôn luôn được chuyển thành một chuỗi? – Delorian

+0

Nó phải được chuyển trong thẻ HTML. Bạn chỉ cần không sử dụng các params một cách chính xác. Tôi tin rằng params [0] là bạn min và params [1] là độ tuổi tối đa của bạn. Bạn không phải phân tích chuỗi. – NMC

6

này không làm việc, ít nhất là trong mới nhất jQuery/Validate. Đây là một fiddle cho thấy một số validators tùy chỉnh, 3 trong số đó có một mảng các tham số: http://jsfiddle.net/jbubriski/YQgEq/120/

Đây là một trong những ví dụ có tham số chuỗi. Thay vì nói số data-rule-customname="true", bạn chỉ định các tham số data-rule-customname='["string",1,2,3]'.

(Lưu ý việc lật dấu ngoặc kép ... sử dụng dấu nháy đơn để biểu thị các chuỗi dường như không hoạt động.Sử dụng dấu ngoặc kép)

Markup:

<div> 
    Custom 3 (Requires 'pig' or 'mouse'): <input type="text" id="custom3" name="custom3" data-rule-required="true" data-rule-customv3='["pig","mouse"]' data-msg-customv3="Enter a cool animal name!" /> 
</div> 

JS:

jQuery.validator.addMethod("customv3", function(value, element, params) { 
    if (this.optional(element)) 
     return true; 

    for (var i = 0; i < params.length; i++) 
     if (value == params[i]) 
      return true 

    return false; 
}, jQuery.validator.format("Please enter one of the following values: {0} {1}")); 

Vấn đề duy nhất với ví dụ trên là tôi không chắc chắn nếu có một cách để tự động tạo ra thông báo lỗi nếu bạn đang mong đợi các thông số n. Mã hiện tại hoạt động tốt, nhưng giả sử 2 tham số.

Tôi cũng có một bài viết trên blog rằng chi tiết một số khía cạnh khác của việc sử dụng thuộc tính dựa trên xác nhận: http://johnnycode.com/2014/03/27/using-jquery-validate-plugin-html5-data-attribute-rules/

+0

Tốt! Tôi đã làm tất cả mọi thứ tốt ngoại trừ các dấu ngoặc kép lộn xộn. Nó đã giúp tôi rất nhiều kể từ khi tôi đang sử dụng các thuộc tính html để thiết lập các quy tắc cho các lĩnh vực cụ thể. – Marco

Các vấn đề liên quan