2012-05-06 38 views
6

Bất cứ khi nào tôi sử dụng require_from_group nó sẽ vô hiệu hóa tất cả các xác thực khác. Bất kỳ ý tưởng tại sao?Jquery .validate require_from_group

Cũng có cách để nhóm "Telefon" và "Mobitel" và áp dụng require_from_group cho nó?

$(document).ready(function(){ 
    $("#fncMain").validate(
    { 
    /*groups:{Call:"Telefon Mobitel"},*/ 
    rules:{ 
     Davcna:{required:true,exactlength:5, digits:true}, 
     Idzav:{required:true,exactlength:5, digits:true}, 
     Maticna:{required:true,exactlength:5, digits:true}, 
     Telefon:{require_from_group: [1,".callme"]}, 
     Mobitel:{require_from_group: [1,".callme"]} 
    }, 
    messages:{ 

    }} 
    ); 
    }); 

Tất cả các trường khác không được bao gồm ở đây sử dụng lớp "bắt buộc" đơn giản. Nếu tôi xóa require_from_group quy tắc được áp dụng cho "Telefon" và "Mobitel" thì tất cả các xác thực trường khác đều hoạt động tốt.

Cảm ơn bạn đã trợ giúp.

EDIT html: http://cl.ly/29391q0Q3G231T2I380m (quá lâu để đăng nó ở đây)

+1

Bạn có thể chia sẻ html cho biểu mẫu này, ít nhất là nó có liên quan đến các quy tắc này không? tức là những thứ có lớp 'callme', v.v. – Ryley

+0

@Ryley tôi đã đăng HTML của tôi (phần biểu mẫu). Kiểm tra chỉnh sửa bài đăng của tôi. :) – John

+0

Tôi nghĩ bạn đã tìm thấy một lỗi ... – Ryley

Trả lời

5

@Tats_innit gửi một tùy chỉnh require_from_group đây: https://stackoverflow.com/posts/13127475

Hóa ra, điều này cũng sửa chữa một lỗi github đăng nhập đã được phát hành với phiên bản 1.10.0 của require_from_group trong additional-method-1.10.js cho jquery.validation.

vấn đề github: require_from_group disables other rules

smileyanp @ github trích dẫn bài này trong dung dịch của mình, nơi anh tái sử dụng @ chức năng Tats_innit và tạo ra một test cho thấy nó hoạt động một cách chính xác và không vô hiệu hóa xác nhận trên các quy tắc khác được xác định trước require_from_group.

bài này là ở đây như một tiết kiệm thời gian vì điều này bị đốt cháy 3 giờ googling cho một chi tiết nhỏ như vậy ..

FIX:

Chỉ cần cập nhật additional-method-1.10.js hoặc thực thi mã này sau khi additional-method-1.10.js đã nạp (để ghi đè lên hàm).

jQuery.validator.addMethod("require_from_group", function(value, element, options) { 
    var numberRequired = options[0]; 
    var selector = options[1]; 
    var fields = $(selector, element.form); 
    var filled_fields = fields.filter(function() { 
    // it's more clear to compare with empty string 
    return $(this).val() != ""; 
    }); 
    var empty_fields = fields.not(filled_fields); 
    // we will mark only first empty field as invalid 
    if (filled_fields.length < numberRequired && empty_fields[0] == element) { 
    return false; 
    } 
    return true; 
// {0} below is the 0th item in the options field 
}, jQuery.format("Please fill out at least {0} of these fields.")); 
+0

Khi so sánh hành vi của phiên bản 1.11.1 của chức năng này với phiên bản trong câu trả lời này, tôi đã nhận thấy rằng phiên bản này dường như không thực hiện xác nhận lại tham lam như phiên bản giao hàng. Phiên bản này không xác thực trên gửi biểu mẫu, nhưng vận chuyển sẽ xóa thông báo xác thực ngay khi số trường tối thiểu có giá trị trong chúng (onkeyup). Chỉ cần một FYI trong trường hợp bất cứ ai yêu cầu xác nhận lại tham lam cho trường hợp sử dụng của họ. – jinglesthula

2

Sửa: Nó thực sự trông giống như sửa chữa này đã được tích hợp vào phiên bản 1.12.0 và bạn có thể tìm thấy những gợi ý CDN cho nó ở đây: http://jqueryvalidation.org/

Và để tham khảo:

http://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/jquery.validate.js 
http://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/jquery.validate.min.js 
http://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/additional-methods.js 
http://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/additional-methods.min.js 

Tôi tìm thấy mã này dưới đây trước khi tôi tìm thấy giải pháp ở trên, vì vậy lời khuyên của tôi là sử dụng các liên kết CDN được tham chiếu ở trên thay vì dán mã bên dưới vào tệp JS của bạn.

Có một số better fix out on GitHub now (cuộn xuống dưới cùng) mà tôi đã sao chép tại đây.Đây không phải là công việc của tôi và người dùng GitHub sfreytag đã viết nó, có vẻ không phải là người đóng góp SO, tôi chỉ muốn đưa nó vào SO để những người khác tìm thấy điều này không phải đào sâu qua các chủ đề GitHub:

jQuery.validator.addMethod("require_from_group", function(value, element, options) { 
    var validator = this; 
    var selector = options[1]; 
    var validOrNot = $(selector, element.form).filter(function() { 
     return validator.elementValue(this); 
    }).length >= options[0]; 

    if(!$(element).data('being_validated')) { 
     var fields = $(selector, element.form); 
     fields.data('being_validated', true); 
     fields.valid(); 
     $(element.form).valid(); 
     fields.data('being_validated', false); 
    } 
    return validOrNot; 
}, jQuery.format("Please fill at least {0} of these fields.")); 

tôi đã làm thử nghiệm hạn chế với điều này cho đến nay, nhưng nó dường như được làm việc như bạn mong muốn, tất cả hợp lệ xảy ra (thay vì thổi qua bất kỳ phi "require_from_group" kiểm chứng thực như trước đây), vì vậy Tôi hạnh phúc với nó cho đến nay. Tôi vừa thêm nó sau khi tờ khai xác nhận ở trên cùng của mã JS của tôi:

$.validator.setDefaults({ 
    debug: true, 
    success: "valid" 
}); 

jQuery.validator.addMethod("require_from_group", function(value, element, options) { 
    var validator = this; 
    var selector = options[1]; 
    //continuation of code... 
Các vấn đề liên quan