Xác thực nhóm nút radio bằng cách sử dụng plugin xác thực jQuery


128

Làm cách nào để thực hiện xác thực cho một nhóm nút radio (nên chọn một nút radio) bằng cách sử dụng plugin xác thực jQuery?


Hãy xem câu trả lời từ c.reeves trong forum.jquery.com/topic/ từ

Ngoài ra còn có một trình xác nhận jQuery mới rất mạnh mẽ và dễ sử dụng. Bạn có thể kiểm tra xem: code.google.com/p/bvalidator
Nenad

không muốn bao gồm toàn bộ thư viện cho một cái gì đó đơn giản như thế này
Doug Molineux

Câu trả lời:


113

Với các bản phát hành mới hơn của jquery (1.3+ tôi nghĩ), tất cả những gì bạn phải làm là đặt một trong những thành viên của đài phát thanh được yêu cầu và jquery sẽ lo phần còn lại:

<input type="radio" name="myoptions" value="blue" class="required"> Blue<br />
<input type="radio" name="myoptions" value="red"> Red<br />
<input type="radio" name="myoptions" value="green"> Green

Ở trên sẽ yêu cầu ít nhất 1 trong 3 tùy chọn radio với tên "tùy chọn của tôi" được chọn trước khi tiếp tục.

Gợi ý nhãn của Mahes, btw, hoạt động tuyệt vời!


Đây là câu trả lời tốt nhất cho tôi với các bản cập nhật cho jQuery. +1.
Kieran Andrew

6
Vấn đề duy nhất với điều này là khi không có cái nào trong số chúng được kiểm tra, xác thực jQuery làm nổi bật nút radio đầu tiên màu đỏ, nhưng thực tế bạn có thể muốn làm nổi bật TẤT CẢ chúng. Ngoài ra, một khi bạn kiểm tra bất kỳ nút radio nào, màu đỏ sẽ biến mất.
Haacked

2
@Haacked Bạn có thể sử dụng chức năng gọi lại errorPlocation trong các tùy chọn xác thực để đặt thông báo lỗi ở đâu đó có ý nghĩa?
tự động

2
@Haacked: thêm focusInvalid: falsevào các validate()tùy chọn sẽ ngăn việc tô sáng nút radio đầu tiên.
Jim Miller

2
Tôi luôn luôn làm theo cách này và định vị nhãn lỗi trong hàm errorPlocation. Đây là những gì tôi làm cho các nút radio: if (Element.is ("input: radio")) {error.insertAfter (Element.parent ()); } other {error.insertAfter (phần tử); }
Francisco Goldenstein

24

sử dụng quy tắc sau để xác thực lựa chọn nhóm nút radio

myRadioGroupName : {required :true}

myRadiogroupName là giá trị bạn đã cung cấp cho thuộc tính name


15
Lưu ý rằng nếu bạn muốn kiểm soát vị trí của nhãn, bạn có thể cung cấp nhãn lỗi của riêng bạn ở nơi bạn muốn với văn bản bạn muốn: <nhãn for = "myRadiogroupName" class = "error" style = "display: none; "> Vui lòng chọn một. </ Nhãn>
Tom

@Tom thật vô ích khi tự viết labelthẻ cho lỗi, thực sự plugin tự động thêm thẻ nhãn lỗi này.
ahmehri

3
Cách đây khá lâu, nhưng tôi tưởng tượng những gì tôi đã cố gắng làm là đặt <nhãn> ở nơi khác trong DOM, thay vì nơi nó được plugin tạo ra tự động. Ngoài ra, rất có thể hành vi plugin đã thay đổi trong 5 năm qua ...
Tom

Thật đáng buồn khi nó yêu cầu "tên" thay vì "loại" ở đây cho các lỗi tùy chỉnh.
justdan23

19

Bạn cũng có thể sử dụng điều này:

<fieldset>
<input type="radio" name="myoptions[]" value="blue"> Blue<br />
<input type="radio" name="myoptions[]" value="red"> Red<br />
<input type="radio" name="myoptions[]" value="green"> Green<br />
<label for="myoptions[]" class="error" style="display:none;">Please choose one.</label>
</fieldset>

và chỉ cần thêm quy tắc này

rules: {
 'myoptions[]':{ required:true }
}

Đề cập đến cách thêm quy tắc.


1
Nhưng điều này sẽ mang lại lỗi khi xác thực HTML5, tôi tin rằng thuộc tính for cần phải là một tham chiếu ID (mà chúng ta không thể đặt 3 nút radio thành cùng một ID).
armyofda12mnkeys

1
Có một sự khác biệt LỚN giữa thuộc tính name và thuộc tính id.
Norman H

2
Xin lưu ý rằng một nút radio chỉ trả về một giá trị, do đó, name="myoptions[]"hơi khó hiểu vì nó gợi ý nhiều giá trị có thể được trả về.
Mất trí nhớ

Đặt thông báo lỗi lên trên. <style> .radio-group {vị trí: tương đối; lề trên: 40px; } # myoptions-error {vị trí: tuyệt đối; đầu trang: -25px; } </ style> <div class = "radio-group"> <input type = "radio" name = "myoptions" value = "blue" class = "required"> Blue <br /> <input type = "radio" name = "myoptions" value = "red"> Red <br /> <input type = "radio" name = "myoptions" value = "green"> Green </ div> </ div> <! - end radio- nhóm ->
Sonobor

4

Theo câu trả lời của Brandon. Nhưng nếu bạn đang sử dụng ASP.NET MVC sử dụng xác nhận không phô trương, bạn có thể thêm thuộc tính data-val vào thuộc tính đầu tiên. Tôi cũng muốn có nhãn cho mỗi nút radio cho khả năng sử dụng.

<span class="field-validation-valid" data-valmsg-for="color" data-valmsg-replace="true"></span>
<p><input type="radio" name="color" id="red" value="R" data-val="true" data-val-required="Please choose one of these options:"/> <label for="red">Red</label></p>
<p><input type="radio" name="color" id="green" value="G"/> <label for="green">Green</label></p>
<p><input type="radio" name="color" id="blue" value="B"/> <label for="blue">Blue</label></p>

3

Một cách khác để xác nhận là như thế này.

var $radio = $('input:radio[name="nameRadioButton"]');
$radio.addClass("validate[required]");

Tôi hy vọng ví dụ của tôi sẽ giúp bạn


2

Tôi đã từng gặp vấn đề tương tự. Làm tổn thương chỉ cần viết một chức năng tô sáng và làm nổi bật tùy chỉnh cho trình xác nhận. Thêm phần này vào các tùy chọn hợp lệ sẽ thêm lớp lỗi vào phần tử và nhãn tương ứng của nó:

        'highlight': function (element, errorClass, validClass) {
            if($(element).attr('type') == 'radio'){
                $(element.form).find("input[type=radio]").each(function(which){
                    $(element.form).find("label[for=" + this.id + "]").addClass(errorClass);
                    $(this).addClass(errorClass);
                });
            } else {
                $(element.form).find("label[for=" + element.id + "]").addClass(errorClass);
                $(element).addClass(errorClass);
            }
        },
        'unhighlight': function (element, errorClass, validClass) {
            if($(element).attr('type') == 'radio'){
                $(element.form).find("input[type=radio]").each(function(which){
                    $(element.form).find("label[for=" + this.id + "]").removeClass(errorClass);
                    $(this).removeClass(errorClass);
                });
            }else {
                $(element.form).find("label[for=" + element.id + "]").removeClass(errorClass);
                $(element).removeClass(errorClass);
            }
        },

2

mã cho nút radio -

<div>
<span class="radio inline" style="margin-right: 10px;">@Html.RadioButton("Gender", "Female",false) Female</span>
<span class="radio inline" style="margin-right: 10px;">@Html.RadioButton("Gender", "Male",false) Male</span>                                                        
<div class='GenderValidation' style="color:#ee8929;"></div>    
</div> 

<input class="btn btn-primary" type="submit" value="Create" id="create"/>

và mã jQuery-

<script>
    $(document).ready(function () {
        $('#create').click(function(){

            var gender=$('#Gender').val();
            if ($("#Gender:checked").length == 0){
                $('.GenderValidation').text("Gender is required.");
                return false;
            }
        });
    });
</script>

0

Đặt thông báo lỗi lên trên.

   <style> 

 .radio-group{ 
      position:relative; margin-top:40px; 
 } 

 #myoptions-error{ 
     position:absolute; 
     top: -25px; 
  } 

 </style> 

 <div class="radio-group"> 
 <input type="radio" name="myoptions" value="blue" class="required"> Blue<br /> 
 <input type="radio" name="myoptions" value="red"> Red<br /> 
 <input type="radio" name="myoptions" value="green"> Green </div>
 </div><!-- end radio-group -->
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.