2011-03-17 94 views
4

我驗證這個簡單一點我的形式:jQuery驗證,只有當某些單選按鈕選擇

<script type="text/javascript"> 

        $(function() 
        { 
         $("#postform").validate({ 
          rules: { 
           post_title: "required", 
           post_url: "required", 
           post_code: "required", 
           post_content: "required", 
           post_tags: "required" 
          } 
         }); 
        }); 

        </script> 

,但我不希望要求POST_URL或post_code如果不檢查某個單選按鈕,因爲他們得到當我選擇它們時隱藏。例如這裏是電臺:

<li><label for="r1"><input type="radio" name="post_category" id="r1" value="12" checked="checked" /> Share an Article</label></li> 
            <li><label for="r4"><input type="radio" name="post_category" id="r4" value="14" /> Share a Link</label></li> 
            <li><label for="r3"><input type="radio" name="post_category" id="r3" value="13" /> Share some Code</label></li 

,然後這是隱藏或顯示他們的jQuery代碼:

<script type="text/javascript"> 

    jQuery(document).ready(function($) 
    { 
     $("input[name='post_category']").change(function() 
     { 
       $("#discussion-label").toggle(this.value == "12"); 
     }); 
     $("input[name='post_category']").change(function() 
     { 
       $("#code-container").toggle(this.value == "13"); 
       $("#code-label").toggle(this.value == "13"); 
     }); 
     $("input[name='post_category']").change(function() 
     { 
       $("#link-container").toggle(this.value == "14"); 
       $("#link-label").toggle(this.value == "14"); 
     }); 

     $("input#r1:checked").change(); 
     $("input#r3:checked").change(); 
     $("input#r4:checked").change(); 
    }); 

</script> 

這樣的想法是,當用戶選擇第一個單選按鈕只有POST_TITLE,POST_CONTENT和post_tags將被驗證。如果用戶選擇第二個單選按鈕,它也將驗證post_url字段,如果他們選擇第三個單選按鈕,那麼它將驗證post_code字段,但不是post_url了,反之亦然。

任何人都可以幫忙嗎?由於

+0

爲什麼要多次設置更改處理程序? – mattsven 2011-03-17 18:54:46

回答

12

您可以通過使用一個對象與「依賴」的價值,而不是爲你的驗證對象「需要」的字符串,像這樣具有條件驗證:

$("#postform").validate({ 
    rules: { 
     post_title: "required", 
     post_url: { 
      required: { 
       depends: function() { 
        return $('input[name=post_category]:checked').val() == '14'; 
       } 
      } 
     }, 
     post_code: { 
      required: { 
       depends: function() { 
        return $('input[name=post_category]:checked').val() == '13'; 
       } 
      } 
     }, 
     post_content: "required", 
     post_tags: "required" 
    } 
}); 

該功能可以自動使用驗證檢查是否應該進行驗證的框架。如果函數返回true,它將會驗證,否則不會。在這種情況下,每個功能都會查找哪些無線電被檢查,然後將該無線電的值與我們需要它進行驗證所需的值進行比較。