2010-04-23 2 views
6

jQuery 유효성 검사 사용자 지정 메서드에 익숙해 지려고하고 있는데 조금 혼란스러워합니다. 왜 this.optional (요소) 내 사용자 지정 메서드 내에서 항상 false를 반환합니까? 여기 jQuery 유효성 검사 this.optional (element) always false

는 내 코드의 예는 다음과 같습니다

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $.validator.addMethod('customemethod', function(val, el){ 
      return this.optional(el) || false; 
     }, 'custom method says its INVALID !'); 
     $('#myform').validate({ignore: '*[ignore]'}); 
     $('#validate').click(function(){ 
      $('#result').text($('#myform').validate().form()); 
      return false; 
     }); 
    }); 
</script> 
<form id="myform"> 
    <div><input type="text" id="customfield" name="customfield" /></div> 
    <script type="text/javascript"> 
     $(document).ready(function(){$('#customfield').rules('add', { required: true, customemethod: true }) }); 
    </script> 
    <div><input type="text" id="customfield2" name="customfield2" /></div> 
    <script type="text/javascript"> 
     $(document).ready(function(){$('#customfield2').rules('add', { required: false, customemethod: true }) }); 
    </script> 

    <div id="result"></div> 
    <input id="validate" type="submit" /> 
</form> 

경우 요소가 필요하지 않은 경우 그것은 값이없는 비어입니다 - 검증 방법이 호출되고 난,이 경우 true를 반환해야합니다. 그러나 this.optional (엘)은 항상 false입니다 :(

나는 그것을 해결할 수 있습니까? 내가 확인할 수있는 방법 요소가 필요 여부를 내부 사용자 정의 방법은? 감사합니다.

답변

7

optional는 값이 경우 false 인 경우 비어 있지 않으므로 입력란이 비어 있지 않은 경우에만 필드에 대한 유효성 검사를 수행 할 수 있습니다 (예 : 전자 메일 주소가 선택 사항 인 경우). 값이 제공된 경우에만 형식을 확인해야합니다. optional은 값이 제공되지 않으므로 나머지 평가는 수행되지 않습니다.이 메소드의 목적입니다. 비어 있지 않은 값이 필요한 경우 필수 여야합니다. 비어 있거나 필요하지 않은 값은 필요하지 않습니다. 전혀 유효성 검사가 필요합니다.