使用jQuery验证插件验证单选按钮组


Answers:


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

上面将要求在继续之前,选择三个无线电选项中的至少一个,并选择“我的选项”的名称。

顺便说一句,马埃斯(Mahes)提出的标签建议效果很好!


现在,这对我来说是jQuery更新的最佳答案。+1。
基兰·安德鲁斯

6
唯一的问题是,当未选中任何一个时,jQuery validate会突出显示红色的第一个单选按钮,但实际上您可能想要突出显示所有这些按钮。另外,一旦您选中任何单选按钮,红色应消失。
2011年

2
@Haacked您可以在验证选项中使用errorPlacement回调函数将错误消息放置在有意义的地方?
autonomatt

2
@Haacked:focusInvalid: falsevalidate()选项中添加将阻止突出显示第一个单选按钮。
Jim Miller

2
我总是这样做,并将错误标签放置在errorPlacement函数中。这是我对单选按钮所做的操作:if(element.is(“ input:radio”)){error.insertAfter(element.parent()); }其他{error.insertAfter(element); }
Francisco Goldenstein 2014年

24

使用以下规则来验证单选按钮组的选择

myRadioGroupName : {required :true}

myRadioGroupName是您为name属性赋予的值


15
请注意,如果要控制标签的位置,可以在想要的位置提供自己的错误标签,并提供所需的文本:<label for =“ myRadioGroupName” class =“ error” style =“ display:none; “>请选择一个。</ label>
汤姆

@Tom为自己编写label错误标记是没有用的,实际上插件会自动添加此错误标签标记。
ahmehri'5

3
而不是很久以前,但是我想我想做的是将<label>放置在DOM中的其他位置,而不是由插件自动创建的位置。另外,在过去的5年中,插件的行为很有可能发生了变化
Tom

可悲的是,对于自定义错误,它在这里需要“名称”而不是“类型”。
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属性需要是一个ID引用(我们不能将3个单选按钮设置为相同的ID)。
Armyofda12mnkeys 2012年

1
名称属性和id属性之间存在很大的区别。
诺曼H

2
请注意,单选按钮应该只返回一个值,因此,这name="myoptions[]"有点令人困惑,因为它暗示可以返回多个值。
Dementic

将错误消息放在顶部。<style> .radio-group {position:relative; margin-top:40px; }#myoptions-error {位置:绝对;顶部:-25px;} </ 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> <!-结束广播-组->
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 -->
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.