2011-01-06 49 views
27

Tôi đang sử dụng plugin Xác thực jQuery và muốn vô hiệu hóa phần tử hoặc vùng chứa mà nó tạo để hiển thị thông báo lỗi 'message'.Xác thực jQuery - Ẩn Thông báo Lỗi

Về cơ bản, tôi muốn phần tử đầu vào có lỗi có lớp lỗi nhưng KHÔNG tạo phần tử bổ sung chứa thông báo lỗi.

Điều này có khả thi không?

Tôi vừa nghĩ về một giải pháp CSS, nhưng nó không thực sự khắc phục thực tế là phần tử vẫn đang được tạo ra?

<style> 
label.simpleValidationError {display: none !important; } 
</style> 
+1

jQuery chỉ bằng cách riêng của mình không hiển thị hoặc tạo bất kỳ loại thông báo lỗi, bạn sẽ phải đi hơn một chút vào chi tiết những gì bạn đang làm và những gì bạn đang sử dụng để thực hiện điều đó – Hannes

+1

Xin lỗi, tôi là bằng cách sử dụng plugin jQuery Validation: http://bassistance.de/jquery-plugins/jquery-plugin-validation/ – Sjwdavies

+0

~ Điều đó vẫn không thực sự là rất nhiều thông tin bổ sung, vì nó làm rõ một số điều. Bạn đang làm gì khi tạo trình xác thực (tùy chọn khôn ngoan) và bạn xử lý dữ liệu mà nó cung cấp cho bạn như thế nào? – jcolebrand

Trả lời

5

Bạn có thể thiết lập các tùy chọn showErrors đến một chức năng mà chỉ thực hiện yếu tố nổi bật:

$("selector").validate({ 
    showErrors: function() { 
     if (this.settings.highlight) { 
      for (var i = 0; this.errorList[i]; ++i) { 
       this.settings.highlight.call(this, this.errorList[i].element, 
        this.settings.errorClass, this.settings.validClass); 
      } 
     } 
     if (this.settings.unhighlight) { 
      for (var i = 0, elements = this.validElements(); elements[i]; ++i) { 
       this.settings.unhighlight.call(this, elements[i], 
        this.settings.errorClass, this.settings.validClass); 
      } 
     } 
    } 
}); 

Đó chủ yếu dựa vào internals plugin xác nhận, mặc dù, vì vậy nó có thể không an toàn. Tốt nhất là cho các plugin để lộ một phương pháp defaultHighlightElements() giống như cách nó làm cho defaultShowErrors(), nhưng nó không phải là trường hợp (chưa).

69

Sử dụng tùy chọn Validator errorPlacement với một chức năng rỗng:

$("selector").validate({ errorPlacement: function(error, element) {} }); 

này có hiệu quả đặt các thông báo lỗi đâu cả.

+0

Làm việc cho tôi !! – Ryan

+1

Không hoạt động cho tôi: ( – Jonathan

+0

+1 Giải pháp tuyệt vời và ngắn gọn cho điều này! Cảm ơn! – Jonny

5

Bạn cũng có thể sử dụng mã này:

jQuery.validator.messages.required = ""; 

$("selector").validate(); 
2

Tôi cũng có cùng một vấn đề. Tôi không muốn các thông báo lỗi, chỉ là những điểm nổi bật của các hình thức đầu vào cần chú ý. Các thông điệp đều đã trống rỗng như <?php $msj='""';?> nhưng vẫn tạo ra các yếu tố lỗi/container sau khi nhãn ..

Vì vậy, để nhanh chóng ngăn chặn điều này xảy ra tôi đã chỉnh sửa file jquery.validate.js bằng cách bình luận ra các dòng chỉ trong đó nêu label.insertAfter(element); quanh dòng 697 +/- ..

Nó chỉ là cách giải quyết của noob;) nhưng nó đã làm được!

3

Tôi cũng muốn ẩn các thông báo lỗi và để biến các trường inputtextarea màu đỏ, do lỗi. Dưới đây là một ví dụ nhỏ:

http://jsfiddle.net/MFRYm/51/

và mã hoàn toàn làm việc trong trường hợp jsfiddle phá vỡ;)

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
    <title> Demo</title> 

    <script type='text/javascript' src='http://code.jquery.com/jquery-1.10.1.js'></script>  

     <script type='text/javascript' src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.15.0/jquery.validate.js"></script> 


    <style type='text/css'> 
    .error { 
    border: 1px solid red; 
} 
    </style> 

<script type='text/javascript'>//<![CDATA[ 
$(window).load(function(){ 
$("#email_form").validate({ 
     rules: { 
     email: { 
      required: true, 
      email: true 
     } 
     }, highlight: function(input) { 
      $(input).addClass('error'); 
     }, 
    errorPlacement: function(error, element){} 
}); 
});//]]> 

</script> 


</head> 
<body> 
<form name="form" id="email_form" method="post" action="#"> 
    <div class="item" style="clear:left;"> 
     <label>E Mail *</label> 
     <input id="femail" name="email" type="text"> 
    </div> 
    Type invalid email and press Tab key 
</form> 

</body> 

</html> 
2

Như tôi đang sử dụng CSS để định dạng các label.valid, label.error trong jquery validate , nút này xóa tất cả các lỗi và trái và dữ liệu trong các trường biểu mẫu một cách khéo léo.

 <button onclick="$('label.error').css('display', 'none');return false;">Clear Error </button> 
+0

+1, lời giải thích tốt – SagarPPanchal

0

giải pháp dễ nhất chỉ với CSS:

label.valid { 
    display: none; 
} 
1

Có thể là một giải pháp đơn giản hơn nhiều và ngữ nghĩa thích hợp hơn sẽ được sử dụng css

cần
label.error { 
    position:absolute; 
    left:20000px; 
    top:0; 
    } 
input.error { 
    border:red 1px; 
} 

Không JS, dễ dàng hơn để quản lý và người có một trình đọc màn hình sẽ thực sự có một số dấu hiệu cho thấy rằng họ đã bỏ lỡ một cái gì đó

+0

Điểm tốt trên trình đọc màn hình, tôi nên đưa nó vào tài khoản thường xuyên hơn! – SeanKendle

1

Tôi đã có một dự án được phát triển bởi một thư viện xác nhận khác, tôi muốn thêm thư viện hợp lệ để sử dụng các tính năng của nó để kiểm tra biểu mẫu hợp lệ hay không (thư viện xác thực được sử dụng không có tính năng đó)

Tôi đã: tôi chỉ cần thêm thư viện validate bởi tính năng validate CDN

và việc sử dụng nó trên nhấp chuột:

$(document).on('click','#buttonID',function(){ 
    var form = $("#formID"); 
    form.validate(); 
    console.log(form.valid()); 
}); 

và cố giấu giếm thông báo lỗi mà nêu ra bởi jquery validate bằng cách thêm mã CSS:

label.error{ 
    display: none!important; 
} 
0

Bạn có thể thêm onfocus và onkeyup để xóa thông báo lỗi.

$("selector").validate({ 
    onkeyup: false, 
    onfocusout: false 
}); 
Các vấn đề liên quan