jQuery 유효성 검사 플러그인을 사용하여 라디오 버튼 그룹의 유효성 검사


128

jQuery 유효성 검사 플러그인을 사용하여 라디오 버튼 그룹 (하나의 라디오 버튼을 선택해야 함)에 대한 유효성 검사를 수행하는 방법은 무엇입니까?


답변을 forum.jquery.com/topic/…에서 찾아보십시오.

매우 강력하고 사용하기 쉬운 새로운 jQuery 유효성 검사기가 있습니다. 당신은 그것을 확인하실 수 있습니다 : code.google.com/p/bvalidator
네나드

이처럼 단순한 것을 위해 라이브러리 전체를 포함하고 싶지 않습니다
Doug Molineux

답변:


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

위의 과정을 진행하기 전에 "내 옵션"이라는 이름의 3 가지 라디오 옵션 중 하나 이상을 선택해야합니다.

btw 인 Mahes의 레이블 제안은 훌륭하게 작동합니다!


이것은 이제 jQuery에 대한 업데이트로 가장 적합한 답변입니다. +1.
Kieran Andrews

6
이것에 대한 유일한 문제는 아무것도 확인하지 않으면 jQuery validate는 첫 번째 라디오 버튼을 빨간색으로 강조 표시하지만 실제로는 모든 것을 강조 표시하려고합니다. 또한 라디오 버튼을 확인하면 빨간색이 사라집니다.
Haacked

2
@Haacked 유효성 검사 옵션에서 errorPlacement 콜백 함수를 사용하여 오류 메시지를 의미있는 곳에 배치 할 수 있습니까?
autonomatt

2
@Haacked : 추가 focusInvalid: false받는 validate()옵션하면 첫 번째 라디오 버튼의 강조 표시 방지 할 수 있습니다.
Jim Miller

2
나는 항상 이런 식으로하고 errorPlacement 함수에 오류 레이블을 배치합니다. 이것이 라디오 버튼에 대해하는 것입니다 : if (element.is ( "input : radio")) {error.insertAfter (element.parent ()); } else {error.insertAfter (요소); }
Francisco Goldenstein

24

라디오 버튼 그룹 선택을 확인하려면 다음 규칙을 사용하십시오.

myRadioGroupName : {required :true}

myRadioGroupName은 이름 속성에 부여한 값입니다.


15
레이블의 위치를 ​​제어하려는 경우 원하는 텍스트를 원하는 위치에 고유 한 오류 레이블을 제공 할 수 있습니다. <label for = "myRadioGroupName"class = "error"style = "display : none; "> 하나를 선택하십시오. </ label>
Tom

@Tom label오류에 대한 태그 를 작성하는 것은 쓸모가 없습니다 . 실제로 플러그인은이 오류 레이블 태그를 자동으로 추가합니다.
ahmehri

3
오히려 오래 전에 플러그인을 통해 자동으로 생성 된 위치가 아닌 <label>을 DOM의 다른 곳에 배치하려고했다고 생각합니다. 또한 지난 5 년 동안 플러그인 동작이 변경되었을 가능성이 있습니다.
Tom

사용자 정의 오류에 대해 여기에 "type"대신 "name"이 필요한 방법은 슬프다.
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
그러나 이것은 for 속성이 ID 참조 (3 개의 라디오 버튼을 동일한 ID로 설정할 수 없음)가 필요하다고 생각하는 HTML5 유효성 검사에 오류가 발생합니다.
armyofda12mnkeys

1
name 속성과 id 속성 사이에는 큰 차이가 있습니다.
Norman H

2
단일 선택 단추는 하나의 값만 리턴해야하므로 name="myoptions[]"여러 값이 리턴 될 수 있음을 암시하므로 약간 혼동됩니다.
치매

오류 메시지를 맨 위에 놓습니다. <style> .radio-group {위치 : 상대; 여백 : 40px; } # myoptions-error {position : absolute; 상단 : -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> <!-라디오 종료-
group-

4

Brandon의 답변에 따라. 그러나 눈에 거슬리지 않는 유효성 검사를 사용하는 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 -->
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.