2011-07-03 21 views
5

Tôi đã cố gắng để có được một giải pháp xác thực hợp lệ để làm việc cho trang web của mình, nhưng tôi đang gặp sự cố với các tùy chọn khác nhau. Tôi đã đọc kỹ tài liệu và xem các ví dụ, nhưng tôi vẫn gặp vấn đề.jQuery xác thực plugin - showErrors option - errorContainer không ẩn/hiển thị

Biểu mẫu của tôi nằm trong một bảng. Tôi muốn mỗi hàng có hàng lỗi riêng của nó bên dưới nó, thường sẽ bị ẩn, nhưng nó sẽ hiển thị cho mỗi hàng khi thích hợp.

Các tùy chọn sau giấu và cho thấy các hàng lỗi tốt, nhưng được thông báo lỗi thể hiện trong mỗi hàng lỗi là toàn bộ nối của tất cả các thông báo lỗi:

$('#myform').validate({ 
    rules: { 
     firstName: "required", 
     lastName: "required" 
    }, 
    messages: { 
     firstName: "Enter your first name.", 
     lastName: "Enter your last name." 
    }, 
    errorContainer: '.errorRow', 
    errorLabelContainer: '.errorRow.appValueColumn', 
    errorPlacement: function(error, element) { 
     error.appendTo(element.parent().next()); 
    } 
}); 

vì vậy tôi đã cố gắng để sử dụng tùy chọn showErrors như sau :

$('#myform').validate({ 
     rules: { 
      firstName: "required", 
      lastName: "required" 
     }, 
     messages: { 
      firstName: "Enter your first name.", 
      lastName: "Enter your last name." 
     }, 
     errorContainer: '.errorRow', 
     errorContainer: '.errorRow.appValueColumn', 
     showErrors: function(errorMap, errorList) { 
     $.each(errorMap, function(key, value) { 
     $('#'+key).parent().next().children('.appValueColumn').html(errorMap[key]); 
}); 

Vâng, giờ đây tất cả các lỗi đều được phân tách và hiển thị đúng vị trí, nhưng tôi không thể hiển thị .errorRows. Tôi làm gì sai ở đây?

Rất cám ơn

Trả lời

3

Nếu bạn nhìn vào nguồn gốc của các plugin xác nhận đối với phương pháp showErrors, bạn có:

this.settings.showErrors 
      ? this.settings.showErrors.call(this, this.errorMap, this.errorList) 
      : this.defaultShowErrors(); 

Điều này có nghĩa rằng nếu bạn cung cấp một handler tùy chỉnh cho phương pháp này, mặc định hành vi không được thực hiện.

Bạn có thể một trong hai this.defaultShowErrors call() vào cuối handler showErrors riêng của bạn, mà sẽ trở thành:

showErrors: function(errorMap, errorList) { 
    $.each(errorMap, function(key, value) { 
     $('#'+key).parent().next().children('.appValueColumn') 
        .html(errorMap[key]); 
    }); 
    this.defaultShowErrors(); 
}); 

Hope this helps!

+0

Tôi đi theo mã của bạn và áp dụng cho tôi. Lỗi đến onclick gửi nhưng tại thời điểm một số trang làm mới. Bạn có thể vui lòng kiểm tra những gì sai lầm tôi đang làm. fiddle liên kết ở đây: https://jsfiddle.net/locateganesh/we7rkrxk/1/ – locateganesh

+1

Vâng, nhìn vào giao diện điều khiển, bạn có thể thấy có một ngoại lệ "Uncaught TypeError: this.defaultShowErrors không phải là một chức năng". Giống như tôi nói trong bài 'this.defaultShowErrors() 'nên được gọi ở cuối trình xử lý' showErrors' tùy chỉnh, nhưng trong ví dụ mã, nó được đính kèm trong '$ .each()'! Bắt tốt ;-) –

0

Hãy chắc chắn rằng bạn sử dụng classname mà không có sự chấm hàng đầu trên những dòng này:

errorContainer: 'errorRow', 
errorLabelContainer: 'errorRow appValueColumn', 
Các vấn đề liên quan