2010-07-29 32 views
7

Tôi đang gặp sự cố khi sử dụng jQuery Validate. Vấn đề là tôi có một vài hộp văn bản với các thuộc tính maxlength được thiết lập. Mặc dù chúng không bắt buộc, chúng vẫn không xác nhận được khi nào hoặc là trống hoặc khoảng trắng.Đầu vào văn bản có chiều dài tối đa không hợp lệ với jQuery Validate

HTML mẫu:

<input type="textbox" id="tbx1" maxlength="100" value="" />

Sau đó, $('#tbx1').valid() lợi nhuận false. Không nên trả lại true thay thế? Có cách giải quyết nào cho việc này không?

Ồ, và thêm $('#myform').validate({ ignore: '#tbx1' }); không hoàn toàn phù hợp với tôi, vì tôi đang sử dụng các điều khiển ASP.NET với ID tự động của chúng. Tôi biết tôi có thể sử dụng id khách hàng của kiểm soát hoặc một cái gì đó giống như IDOverride của Wilco, nhưng đây không phải là thứ tôi thích.

Vì vậy, bất kỳ ai? Cảm ơn!

+0

là hộp văn bản là trường bắt buộc? Tôi nghĩ rằng các plugin hợp lệ trims khoảng trắng, vì vậy nếu hộp là trống hoặc chỉ cần không gian & yêu cầu nó sẽ không xác nhận. – JKirchartz

+0

@JKirchartz đó là vấn đề. trường là không cần thiết. Tôi không biết nếu đó là một lỗi hoặc thiết kế, nhưng tôi muốn tìm một cách giải quyết cho điều này – rdumont

+0

Đây phải là một lỗi. Tôi đang đau khổ với cùng một điều. Bạn có một trường KHÔNG bắt buộc, nhưng chỉ đơn giản là cung cấp cho nó một maxlength và đột nhiên jquery validate plugin nghĩ rằng nó không xác nhận hợp lệ. 100% lỗi. Một dấu hiệu cho biết câu chuyện khác là nó thậm chí không gây ra lỗi cho trường. Vì vậy, một cái gì đó chắc chắn là busted lên trong đó. Bực bội vì tôi cần đặt giới hạn độ dài tối đa trên các trường của mình! – Aaron

Trả lời

0

Trước tiên, tôi cho rằng đầu vào có thuộc tính "tên" và chỉ đơn giản là không được hiển thị trong ví dụ của bạn? Nếu không, hãy thử điều đó và nó có thể khắc phục vấn đề.

Thứ hai, bạn đã thử đặt rõ ràng trường không bắt buộc nhưng phải có độ dài tối đa trong đối tượng trình xác thực không? Ví dụ:

var rules = { 
    'txtbx1': { 
    required: false, 
    maxlength: '100' 
    } 
}; 

$('#formId').validate({rules:rules}); 
+0

Cảm ơn câu trả lời của bạn, Philip, nhưng điều này không giải quyết được vấn đề. Tôi đã thực sự quên về câu hỏi này, vì nó đã được nhất trí tuyên bố là một lỗi. Thông tin nhập của tôi không có thuộc tính tên, vì nó không cần thiết trong ngữ cảnh đó. Ngoài ra, như tôi đã nói trong câu hỏi, tôi đã tìm kiếm một giải pháp mà sẽ không yêu cầu '$ ('# formId'). Validate (...); ' – rdumont

3

Ran vào vấn đề này bản thân mình trên một số hình thức phức tạp tôi đang viết ...

Giải pháp của tôi chỉ là để tạo ra phương pháp maxlength của riêng tôi mà tôi có thể 'maxLen' mà làm việc gần như giống hệt phương thức mặc định chỉ dưới một tên khác. Chỉ cần dán điều này lên trên cuộc gọi xác thực chính của bạn ($ ("# mainform") .xác thực ({}); hoặc bất kỳ biểu mẫu nào của bạn được gọi).

//Custom Max Length Validation 
jQuery.validator.addMethod("maxLen", function (value, element, param) { 
    //console.log('element= ' + $(element).attr('name') + ' param= ' + param) 
    if ($(element).val().length > param) { 
     return false; 
    } else { 
     return true; 
    } 
}, "You have reached the maximum number of characters allowed for this field."); 

Một khi bạn đã làm điều đó bạn có thể thêm các quy tắc như vậy:

rules: { 
     Message: { 
      required: false, 
      maxLen: 200 
     } 
} 
18

này có vẻ là một lỗi trong plugin này. Nếu sửa lỗi bằng cách thay thế phương thức bằng cách triển khai tùy chỉnh bằng cách sử dụng mã sau:

$.validator.addMethod("maxlength", function (value, element, len) { 
    return value == "" || value.length <= len; 
}); 
+1

Điều này làm việc tốt hơn cho tôi hơn là thiết lập một tên mới cho phương pháp mới. Tôi đã thiết lập thuộc tính maxlength trên trường đầu vào, tôi đã không cố gắng xác thực nó. Ở một mức độ, tôi không cảm thấy cần phải xác thực với nó - trình duyệt đảm bảo rằng bạn không thể thêm nhiều hơn số ký tự được chỉ định, vì vậy tôi thực sự không thể thấy cách xác thực có thể thất bại? Nhưng, không có hại trong việc xác nhận miễn là xác nhận hoạt động. :) – Adam

+1

CẢM ƠN BẠN !! lỗi đó tốn một vài giờ! nó là vượt ra ngoài tôi như thế nào điều này vẫn có thể là một vấn đề sau 2 năm – black666

+0

Điều này rất hữu ích để có kể từ khi kiểm tra "maxlength" của trình duyệt không phải lúc nào cũng tài khoản cho newlines. Như được mô tả [ở đây] (http://stackoverflow.com/questions/10030921/chrome-counts-characters-wrong-in-textarea-with-maxlength-attribute). – Peter

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