jquery依赖表单元素验证

时间:2013-01-10 09:55:41

标签: jquery forms validation jquery-validate

我使用的是一种很长的可扩展形式。例如,如果使用“是”回答question 1,则会显示question 1.1,依此类推。

这适用于以下(简单)jquery脚本:

Selectmenu

<script type="text/javascript">
    $(document).ready(function() {
        $(".question").change(function() {
            var itemValue = $(this).children(':selected').val();

            if(itemValue != "" &&  itemValue != "N")
            {
                $(".questiont").show();
            }
            else
            {
                $(".questiont").hide();
            }
        }); 
    }); 
</script>

HTML

<select name="question1[]" class='required txtBox'>
              <option selected="selected"></option>
              <option value="J">Yes</option>
              <option value="N">No</option>
            </select>
<table>
    <tr class="questiont" style="display:none; border-collapse:collapse;">
              <td>4.2</td>
              <td>Textarea</td>
              <td><textarea name="questiont[]" class="txtBox"></textarea></td>
            </tr>
</table>

问题是,如果1为“是”并且因此显示1.1,则应填写1.1。我正在使用jQuery验证。

问题是我不知道如何将验证与隐藏或显示的状态结合起来。

3 个答案:

答案 0 :(得分:2)

试试这段代码:

if(itemValue != "" &&  itemValue != "N")
            {
                $(".questiont").show();
                $('.questiont').toggleClass('required');
            }
            else
            {
                $(".questiont").hide();
                $('.questiont').toggleClass('required');
            }

答案 1 :(得分:1)

当两个相关元素嵌套在单独的容器元素中时,更容易选择和验证。然后,您可以使用closest()方法选择父容器,并根据您的逻辑进行验证。

例如:

HTML

<div class="question_container">    
    <select name="question1[]" class='required txtBox'>
        <option selected="selected"></option>
        <option value="J">Yes</option>
        <option value="N">No</option>
    </select>
    <table>
        <tr class="questiont" style="display:none; border-collapse:collapse;">
            <td>4.2</td>
            <td>Textarea</td>
            <td><textarea name="questiont[]" class="txtBox"></textarea></td>
        </tr>
    </table>
</div>

<强>的Javascript

$('.question_container select.required').change(
    function() {
        var question_container = $(this).closest('.question_container');
        var questiont          = question_container.find('.questiont textarea');

        if ($(this).val() == 'yes' && !$.trim(questiont.val())) {
            // ... error logic goes here
            // For example:
            question_container.addClass('with_error');
        }
    }
);

答案 2 :(得分:1)

我建议使用jQuery validate plugin默认忽略隐藏字段。

任何满足jQuery选择器“:hidden”的输入元素都将被忽略,一旦显示该元素,它将根据您为其指定的规则进行验证。