2011-03-17 73 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,它将会验证,否则不会。在这种情况下,每个功能都会查找哪些无线电被检查,然后将该无线电的值与我们需要它进行验证所需的值进行比较。