jQuery 유효성 검사 필수 선택


146

jQuery Validate 플러그인을 사용하여 html select 요소의 유효성을 검사하려고합니다. "필수"규칙을 true로 설정했지만 기본적으로 0 인덱스가 선택되므로 항상 유효성 검사를 통과합니다. 필수 규칙에 사용되는 빈 값을 정의하는 방법이 있습니까?

UPD. 예. 다음과 같은 html 컨트롤이 있다고 상상해보십시오.

<select>
  <option value="default">Choose...</option>
  <option value="1">1</option>
  <option value="2">2</option>
</select>

유효성 검사 플러그인이 "기본"값을 비워두기를 원합니다.


도움이 될만한 코드를 추가하십시오.
Lee

답변:


213

당신은 당신의 자신의 규칙을 작성할 수 있습니다!

 // add the rule here
 $.validator.addMethod("valueNotEquals", function(value, element, arg){
  return arg !== value;
 }, "Value must not equal arg.");

 // configure your validation
 $("form").validate({
  rules: {
   SelectName: { valueNotEquals: "default" }
  },
  messages: {
   SelectName: { valueNotEquals: "Please select an item!" }
  }  
 });

1
다음과 같이 값 대신 선택한 텍스트를 테스트 할 수 있습니다.$.validator.addMethod("valueNotEquals", function(value, element, arg){ return return arg != jQuery(element).find('option:selected').text(); }, "Value must not equal arg.");
Pablo SG Pacheco

11
향후 독자를 돕기 위해 : 여기서 SelectName은 id 속성의 값이 아니라 name 속성의 값을 의미합니다. JS에서 작업 할 때 일반적으로 이름이 아닌 ID로 작동하기 때문에 약간 혼란 스럽습니다. 설명서를 참조하십시오 여기에 ". 규칙 (기본 : 규칙이 마크 업에서 읽기 (클래스, 속성, 데이터)) 형태 : Object 키 / 사용자 정의 규칙을 정의 값 쌍 키는 것입니다 이름 요소의"
인 Dror

239

더 쉬운 솔루션이 여기에 설명되어 있습니다 : 유효성 검사 선택 상자

값을 비우고 필수 속성을 추가하십시오.

<select id="select" class="required">
<option value="">Choose an option</option> 
<option value="option1">Option1</option>
<option value="option2">Option2</option>
<option value="option3">Option3</option>
</select>

11
그러나 항상 가능하거나 바람직하지는 않은 빈 값을 선택해야합니다.
Muleskinner

4
원래 포스터가 특별히 유효성 검증 생성자에 제공되고 마크 업에는없는 옵션 인 "규칙"을 사용하도록 요청하기 때문에 허용되는 대답이 아닙니다. 때로는 마크 업을 수정하지 않아도됩니다. (그리고 개인적으로, 난 그냥하지에 마크 업에 로직을 넣어 것을 선호합니다.)
메이슨 Houtz

3
@MasonHoutz 논리가 value = ""또는 value = "default"를 기대하는지 여부에 관계없이 마크 업에서 여전히 논리입니다
billrichards


30

최소 규칙 사용

첫 번째 옵션 값을 0으로 설정

'selectName':{min:1}

첫 번째 값은 고정되어 있습니다 (이 값에 대한 백엔드 논리가 있습니다)
SiberianGuy 1

9

validate[required]이 선택의 클래스 로만 입력 한 다음 value = ""옵션을 입력하면됩니다.

예를 들면 다음과 같습니다.

<select class="validate[required]">
  <option value="">Choose...</option>
  <option value="1">1</option>
  <option value="2">2</option>
</select>

7

나는 질문이 제기 된 시간 (2010)에 플러그인이 어땠는지 모르겠지만 오늘 같은 문제에 직면하여 이런 식으로 해결했습니다.

  1. 선택 태그에 이름 속성을 제공하십시오. 예를 들어이 경우

    <select name="myselect">

  2. 태그 옵션에서 value = "default"속성을 사용하는 대신 Andrew Coats가 제안한대로 기본 옵션을 비활성화하거나 value = ""를 설정하십시오.

    <option disabled="disabled">Choose...</option>

    또는

    <option value="">Choose...</option>

  3. 플러그인 유효성 검사 규칙 설정

    $( "#YOUR_FORM_ID" ).validate({ rules: { myselect: { required: true } } });

    또는

    <select name="myselect" class="required">

Obs : Andrew Coats의 솔루션은 양식에 하나의 선택 항목이있는 경우에만 작동합니다. 솔루션이 둘 이상의 선택에서 작동하게하려면 선택에 이름 ​​속성을 추가하십시오.

그것이 도움이되기를 바랍니다! :)


1
한마디로, 추가 required받는 사람 속성을 <select>태그 추가 disabled처음에 속성을 <option>(또는 함께 하나의 태그 selected가있는 경우 속성)
스티븐

4

간단하고 이해하기 쉬운 예는 다음과 같습니다.

   <select class="design" id="sel" name="subject">
        <option value="0">- Please Select -</option>
        <option value="1"> Example1 </option>
        <option value="2"> Example2 </option>
        <option value="3"> Example3 </option>
        <option value="4"> Example4 </option>
   </select>

    <label class="error" id="select_error" style="color:#FC2727"><b> Warning : You have to Select One Item.</b></label><td>

    <input type="submit" name="sub" value="Gönder" class="">

JQuery :

jQuery(function() {  

jQuery('.error').hide(); // Hide Warning Label. 

jQuery("input[name=sub]").on("click", function() {

   var returnvalue;

   if(jQuery("select[name=subject]").val() == 0) {

        jQuery("label#select_error").show(); // show Warning 
        jQuery("select#sel").focus();  // Focus the select box      
        returnvalue=false;   

}

return returnvalue;

});
      });  // you can change jQuery with $

2
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script>

 <form id="myform"> 
       <select class="form-control" name="user_type">
        <option value="">Select</option>
        <option value="2">1</option>
        <option value="3">2</option>
        </select>
       </form>


<script>
  $('#myform').validate({ // initialize the plugin
            rules: {
          user_type:{ required: true},
         }
      });
</script>

선택 값은 비어 있습니다


2
이 코드 스 니펫은 문제를 해결할 수 있지만 설명을 포함하면 게시물의 품질을 향상시키는 데 실제로 도움이됩니다. 앞으로 독자들에게 질문에 대한 답변을 제공하므로 해당 사람들이 코드 제안의 이유를 모를 수도 있습니다. 설명 주석으로 코드를 복잡하게 만들지 마십시오. 이렇게하면 코드와 설명의 가독성이 떨어집니다!
Filnor

1

간단합니다. Select 필드 값을 가져와야하며 "default"일 수 없습니다.

if($('select').val()=='default'){
    alert('Please, choose an option');
    return false;
}

1

@JMP 언급이 솔루션은 약간의 수정과 함께 내 경우 일 : 내가 사용하는 element.value대신 valueaddmethod.

$.validator.addMethod("valueNotEquals", function(value, element, arg){
    // I use element.value instead value here, value parameter was always null
    return arg != element.value; 
}, "Value must not equal arg.");

// configure your validation
$("form").validate({
    rules: {
        SelectName: { valueNotEquals: "0" }
    },
    messages: {
        SelectName: { valueNotEquals: "Please select an item!" }
    }  
});

여기에 특별한 경우가 있지만 원인을 추적하지는 않았을 수 있습니다. 그러나 @JMP의 솔루션은 정기적 인 경우 작동해야합니다.


0

선택 "qualifica"의 유효성을 검사하는 방법

$(document).ready(function(){

    $('.validateForm').validate({
        rules: {
            fullname: 'required',
            ragionesociale: 'required',
            partitaiva: 'required',
            recapitotelefonico: 'required',
            qualifica: 'required',
            email: {
                required: true,
                email: true
            },
        },
        submitHandler: function(form) {

            var fullname = $('#fullname').val(),
                            ragionesociale = $('#ragionesociale').val(),
                            partitaiva = $('#partitaiva').val(),
                            email = $('#email').val(),
                            recapitotelefonico = $('#recapitotelefonico').val(),
                            qualifica = $('#qualifica').val(),
                            dataString = 'fullname=' + fullname + '&ragionesociale=' + ragionesociale + '&partitaiva=' + partitaiva + '&email=' + email + '&recapitotelefonico=' + recapitotelefonico + '&qualifica=' + qualifica;

            $.ajax({
                type: "POST",
                url: "util/sender.php",
                data: dataString,
                success: function() {

                    window.location.replace("./thank-you-page.php");


                }
            });
            return false;
        }
    });

});

3
스택 오버플로에 오신 것을 환영합니다! 이 코드 스 니펫에 대해 약간의 단기적인 도움을 제공 할 수 있습니다. 적절한 설명 이것이 문제에 대한 좋은 해결책 인지 보여줌으로써 장기적인 가치를 크게 향상시킬 것이며, 다른 비슷한 질문을 가진 미래 독자들에게 더 유용 할 것입니다. 제발 편집 당신이 만든 가정 등 일부 설명을 추가 할 답변을.
Toby Speight
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.