Проверка группы переключателей с помощью подключаемого модуля проверки jQuery


128

Как выполнить проверку для группы переключателей (должен быть выбран один переключатель) с помощью плагина проверки jQuery?


Посмотрите ответ c.reeves на forum.jquery.com/topic/…

Есть новый валидатор jQuery, который очень мощный и простой в использовании. Вы можете проверить это: code.google.com/p/bvalidator
Nenad

не хочу включать всю библиотеку для чего-то столь же простого, как это
Дуг Молайнё

Ответы:


113

В более новых выпусках jquery (я думаю, 1.3+) все, что вам нужно сделать, это установить один из элементов радиоприемника как обязательный, а jquery позаботится обо всем остальном:

<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

Вышеупомянутое потребует выбора по крайней мере 1 из 3 опций радио с названием «мои опции», прежде чем продолжить.

Кстати, название лейбла, предложенное Махесом, прекрасно работает!


Теперь это лучший ответ для меня с обновлениями jQuery. +1.
Киран Эндрюс

6
Единственная проблема с этим заключается в том, что когда ни один из них не отмечен, jQuery validate выделяет первый переключатель красным цветом, но на самом деле вы, вероятно, захотите выделить ВСЕ из них. Кроме того, как только вы отметите любой переключатель, красный цвет должен исчезнуть.
Haacked

2
@Haacked Вы могли бы использовать функцию обратного вызова errorPlacement в параметрах проверки, чтобы поместить сообщение об ошибке в какое-нибудь значимое место?
autonomatt

2
@Haacked: добавление focusInvalid: falseк validate()опции позволит предотвратить выделение первой кнопки радио.
Джим Миллер

2
Я всегда так делаю и помещаю метку ошибки в функцию errorPlacement. Вот что я делаю для переключателей: if (element.is ("input: radio")) {error.insertAfter (element.parent ()); } else {error.insertAfter (элемент); }
Francisco Goldenstein

24

используйте следующее правило для проверки выбора группы переключателей

myRadioGroupName : {required :true}

myRadioGroupName - это значение, которое вы дали атрибуту name


15
Обратите внимание, что если вы хотите контролировать положение метки, вы можете указать свою собственную метку ошибки там, где вы хотите, с желаемым текстом: <label for = "myRadioGroupName" class = "error" style = "display: none; "> Пожалуйста, выберите один. </label>
Том,

@Tom бесполезно писать себе labelтег для ошибки, на самом деле плагин автоматически добавляет этот тег метки ошибки.
Ахмери

3
Довольно давно, но я полагаю, что я пытался разместить <label> в другом месте в DOM, а не там, где он был автоматически создан плагином. Кроме того, вполне возможно, что поведение плагина изменилось за последние 5 лет ...
Том

Печально, что здесь для пользовательских ошибок требуется «имя» вместо «типа».
justdan23

19

Вы также можете использовать это:

<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>

и просто добавьте это правило

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

Упомяните, как добавлять правила.


1
Но это приведет к ошибкам при проверке HTML5, я считаю, поскольку атрибут for должен быть ссылкой на идентификатор (который мы не можем установить для трех переключателей на один и тот же идентификатор).
armyofda12mnkeys

1
Между атрибутом name и атрибутом id есть БОЛЬШАЯ разница.
Norman H

2
Обратите внимание, что радиокнопка должна возвращать только одно значение, поэтому name="myoptions[]"это немного сбивает с толку, поскольку намекает, что можно вернуть несколько значений.
Dementic

Помещает сообщение об ошибке сверху. <стиль> .radio-group {позиция: относительная; Запас-топ: 40px; } # myoptions-error {позиция: абсолютная; верх: -25 пикселей; } </style> <div class = "radio-group"> <input type = "radio" name = "myoptions" value = "blue" class = "required"> Синий <br /> <input type = "radio" name = "myoptions" value = "red"> Красный <br /> <input type = "radio" name = "myoptions" value = "green"> Зеленый </div> </div> <! - конец радио- group ->
Sonobor

4

Согласно ответу Брэндона. Но если вы используете ASP.NET MVC, который использует ненавязчивую проверку, вы можете добавить атрибут data-val к ​​первому. Мне также нравится иметь метки для каждого переключателя для удобства использования.

<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

Другой способ проверки такой.

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

Надеюсь мой пример вам поможет


2

У меня такая же проблема. В итоге просто написал настраиваемую функцию выделения и снятия выделения для валидатора. Добавление этого в параметры проверки должно добавить класс ошибки к элементу и его соответствующую метку:

        '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

код для радиокнопки -

<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"/>

и код 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

Помещает сообщение об ошибке сверху.

   <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 -->
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.