0

我正在使用一个很长的可扩展表单。例如如果question 1回答“是”,question 1.1将显示等等。

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

选择菜单

<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 验证。

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

4

3 回答 3

2

试试这个代码:

if(itemValue != "" &&  itemValue != "N")
            {
                $(".questiont").show();
                $('.questiont').toggleClass('required');
            }
            else
            {
                $(".questiont").hide();
                $('.questiont').toggleClass('required');
            }
于 2013-01-10T10:31:26.747 回答
1

It's easier to select and validate when the two related elements are nested in a separate container element. You can then select the parent container with the closest() method and validate according to your logic.

For example:

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');
        }
    }
);
于 2013-01-10T10:23:21.813 回答
1

我建议使用jQuery validate 插件,默认情况下会忽略隐藏字段。

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

于 2013-01-10T10:30:55.383 回答