jQuery验证:如果输入了一个输入,则其他输入应该是强制性的

jQuery验证:如果输入了一个输入,则其他输入应该是强制性的,jquery,jquery-validate,Jquery,Jquery Validate,我有一个表单,有几行4个输入字段,看起来如下: <tr> <td><input name="company01" id="company01" /></td> <td><input name="description01" id="description01" /></td> <td><input name="costs01" id="costs01" class="su

我有一个表单,有几行4个输入字段,看起来如下:

<tr>
    <td><input name="company01" id="company01" /></td>
    <td><input name="description01" id="description01" /></td>
    <td><input name="costs01" id="costs01" class="sum" /></td>
    <td><input name="file01" id="file01" /></td>
</tr>

<tr>
    <td><input name="company02" id="company02" /></td>
    <td><input name="description02" id="description02" /></td>
    <td><input name="costs02" class="sum" id="costs02" /></td>
    <td><input name="file02" id="file02" /></td>
</tr>

现在,当用户输入行的一个输入(例如,成本字段)时,必须输入公司和描述符(但不是附件)

文件上传从来都不是强制性的。但是,用户必须至少在第行填写公司、说明和成本


有人能告诉我如何检查是否至少完成了一行吗?我该如何使用jQUery验证插件检查其他两个是否已完成?

可以使用必需的方法和


默认情况下,jQuery验证不会检查禁用的输入。虽然依赖关系表达式完全符合您在问题中的要求,但我认为值得扪心自问的是,您的表单允许在没有公司名称的情况下进行描述是否合理。根据您想要获得的用户体验,最好从禁用描述、成本和文件上载开始,明确告知用户这些字段本身不可用。然后在jQuery验证规则中将它们标记为必需的,当它们被启用时,它们是必需的

诀窍是在添加公司名称时启用它们。我会这样做:

标记

<!-- add a class to the row for ease of dom traversal -->
<tr class="company-row">
    <!-- add a class to the company name for ease of selection -->
    <td><input class="company-name" name="company01" id="company01" /></td>
    <td><input name="description01" id="description01" /></td>
    <td><input name="costs01" id="costs01" class="sum" /></td>
    <td><input name="file01" id="file01" /></td>
</tr>
这应该可以做到,但我承认我没有测试过我刚刚写的任何东西。您还可能会遇到这样的情况:有人遗漏了公司描述,试图提交,收到了字段的验证消息,删除了公司名称,验证消息不会消失(而且他们可能无法提交表单)。我刚才忘记了如何修复这个问题,但总体方法是在整个验证器上调用
.resetform()
,这将删除任何验证消息。如果您在提交时调用它,这可能会起作用。

您可以使用a使一个字段的规则取决于另一个字段的状态

下面是一个工作示例

工作演示:

jQuery

$(document).ready(function () {

    $('#myform').validate({ // initialize the plugin
        // other options,
        rules: {
            field1: {
                required: true
            },
            field2: {
                required: '#field1:filled'
            }
        }
    });

});
HTML(还为每个
输入添加了
id
):


未使用验证方法解决此问题。我所做的是,检查一行中的所有输入,看它们是否都是空的或都是填的。如果任何一行不匹配,我只创建一个警报对话框


不是很好,但至少它完成了验证

当然,这是您想要的—条件必填字段。但在这种情况下。。。为什么不应请求添加后续行并始终要求所有行都使用这些字段?请说明您试图解决此问题的方法。如果您使用的是jQuery验证插件,那么您的
.Validate()
代码在哪里?
$(document).ready(function() {
    $('.company-name').on('keyup', function() {
        var $this = $(this);
        if($this.val() != '') {
            $this.parents('.company-row').find('input').removeAttr('disabled');
        } else {
            $this.parents('.company-row').find('input').not('.company-name').attr('disabled', 'disabled');
        }
    });
)}
$(document).ready(function () {

    $('#myform').validate({ // initialize the plugin
        // other options,
        rules: {
            field1: {
                required: true
            },
            field2: {
                required: '#field1:filled'
            }
        }
    });

});
<form id="myform">
    <input type="text" name="field1" id="field1" />
    <input type="text" name="field2" id="field2" />
</form>