【问题标题】:jquery dependend form elements validationjquery依赖表单元素验证
【发布时间】:2013-01-10 09:55:41
【问题描述】:

我正在使用一个很长的可扩展表单。例如,如果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 验证。

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

【问题讨论】:

  • 可以分享一下生成的HTML吗?
  • 完成!我也删除了 PHP。

标签: jquery forms validation jquery-validate


【解决方案1】:

试试这个代码:

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

【讨论】:

  • 我正在尝试,但我使用了 addclass('required'),但它没有验证。我会试试toggleClass
  • 我觉得这个做到了!我还在玩它,但它看起来不错!
  • Mmhh 它表现得很奇怪,例如当我加载表单时,选择否并提交,额外的字段仍然是必需的(虽然它不应该是)。如果我玩它,它就不再需要了(虽然它应该)。我现在尝试了 removeClass 和 addClass。现在测试一下。
【解决方案2】:

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

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

【讨论】:

  • 我试过了,但它没有切换验证..这将是理想的。
  • 也许您使用的是旧版本的验证插件,您需要 >= 1.9.0
  • 我会试试,它会为你节省很多切换课程
【解决方案3】:

当两个相关元素嵌套在单独的容器元素中时,选择和验证更容易。然后您可以使用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');
        }
    }
);

【讨论】:

  • 感谢您的工作。我同意你的看法,这将是本示例中的最佳解决方案,但表单包含几个“是”选项,其中不需要验证额外字段。除此之外,有时需要对“否”或选中复选框等进行验证。是否可以逐个检查问题并将“必需”类添加到文本区域(在本例中)?
  • 在重读问题后编辑了我的示例。请注意,现在会在 change() 上触发错误,如您的示例所示。该事件现在也仅绑定到 required 类的 select 元素。使用类选择器,您可以标记每个字段或一组字段以使用(或不使用)任何验证逻辑。
  • 感谢您的所有工作,我刚刚接受了另一个答案,但对您的评论和答案表示赞同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 2020-09-18
  • 1970-01-01
相关资源
最近更新 更多