Перевірка групи перемикачів за допомогою плагіна перевірки jQuery


128

Як виконати перевірку для групи перемикачів (повинна бути обрана одна перемикач) за допомогою плагіну перевірки jQuery?


Подивіться відповідь c.reeves на forum.jquery.com/topic/…

Тут є новий валідатор jQuery, який дуже потужний і простий у використанні. Ви можете перевірити це: code.google.com/p/bvalidator
Ненад

не хочуть включати всю бібліотеку для чогось такого простого
Дуг Моліне

Відповіді:


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 варіантів радіозв’язку без назви "моїх опцій", перш ніж продовжувати.

Пропозиція етикетки Mahes, btw, чудово працює!


Зараз це найкраща відповідь для мене з оновленнями jQuery. +1.
Kieran Andrews

6
Єдина проблема з цим полягає в тому, що жодна з них не перевірена, jQuery validate підсвічує першу перемикач червоним кольором, але насправді ви, мабуть, хочете виділити ВСІ з них. Крім того, після перевірки будь-якої радіо кнопки червоний колір повинен згасати.
Зламаний

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

2
@ Haacked: додавання focusInvalid: falseдо validate()параметрів запобіжить підсвічування першої радіо кнопки.
Джим Міллер

2
Я завжди роблю це так і розміщую мітку помилки у функції errorPlacement. Це я роблю для радіо кнопок: if (element.is ("input: radio")) {error.insertAfter (element.parent ()); } else {error.insertAfter (елемент); }
Франсиско Гольденштейн

24

використовувати наступне правило для перевірки вибору групи перемикачів

myRadioGroupName : {required :true}

myRadioGroupName - це значення, яке ви дали атрибуту name


15
Зауважте, що якщо ви хочете контролювати позицію мітки, ви можете вказати власну мітку помилки там, де ви хочете, з текстом, який ви хочете: <label for = "myRadioGroupName" class = "error" style = "display: none; "> Виберіть, будь ласка. </label>
Том,

@Там марно писати собі 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 treba бути ідентифікаційний код (який ми не можемо встановити 3 перемикача на той самий ідентифікатор).
armyofda12mnkeys

1
Існує велика різниця між атрибутом name та атрибутом id.
Норман Н

2
Будь ласка, не потрібно, щоб перемикач повинен повертати лише одне значення, тому name="myoptions[]"це трохи заплутано, оскільки натякає на те, що можна повернути кілька значень.
Дементік

Ставить повідомлення про помилку зверху. <стиль> .радио-група {позиція: відносна; margin-top: 40 пікселів; } # міопції-помилка {позиція: абсолютна; вгорі: -25px; } </style> <div class = "radio-group"> <input type = "radio" name = "myoptions" value = "blue" class = "обов'язково"> Синій <br /> <type type = "radio" name = "myoptions" value = "red"> Червоний <br /> <type type = "radio" name = "myoptions" value = "green"> Зелений </div> </div> <! - закінчення радіо- група ->
Сонобор

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

У мене була така ж проблема. Завершення просто написання спеціальної функції підсвічування та освітлення для валідатора. Додаючи це до параметрів validaton, слід додати клас помилки до елемента та його відповідної мітки:

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