2010-04-23 36 views
6

我想熟悉jQuery驗證自定義方法,似乎有點困惑。爲什麼我的自定義方法中的this.optional(element)總是返回false?jQuery驗證this.optional(元素)總是假

這裏是我的代碼示例:如果元素是不需要的情況下,

<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致發光(EL)始終爲假:(

我該如何解決呢?我如何檢查是否元素是必需的或內部沒有自定義的方法? 感謝。

回答

7

optional是,如果值false不是空的,所以你可以在字段上執行驗證,但是隻有當它不是空的時候,例如,如果電子郵件地址是可選的,你必須驗證格式,但只有在提供值的情況下才能驗證optional返回true if值沒有提供,所以剩下的評估沒有被執行,這是這個方法的目的,如果你需要值不是空的,它必須被需要,如果你需要它不是空的,你不需要需要驗證。