jQuery验证 - 无论如何使用子组?

时间:2014-01-30 17:51:15

标签: javascript jquery jquery-validate

我使用jQuery Validate 1.11.1和jQuery 1.11.0。

我有一个表单,它有三对开始/结束日期。对于每一对,我验证两个输入是否已填写或者没有填写,因为不允许填写开始日期而不是结束日期,反之亦然;另外,我不能在没有填写任何一对的情况下发送表格。

想象一下,用户只在开始日期输入日期,但在结束日期没有输入日期。我必须向他展示三条错误消息,每对一条消息。但如果用户没有输入任何数据,我只应向他发送一条错误消息。

问题在于我有四个组,每组一个,整个表格一个,换句话说,前三个是较大组的子组。

如果我最后将更大的组放在我的代码中,如果用户没有输入任何数据,我只会收到一条错误消息,但如果用户只输入了开始日期,我只会收到一条错误消息。如果我将较大的组放在开头,当用户输入刚开始日期时,我会收到三条错误消息,但如果用户发送一个空表单,则会收到三条相同的错误消息。

HTML:

<div id="msgErros"></div>
<form>
    <label for="dataInicialSolicitacao">Solicita&ccedil;&atilde;o Inicial</label>
    <input type="text" class="data skipOrFillDatasSolicitacao atLeastOneRequired" id="dataInicialSolicitacao" value="" size="12" name="filtro.dataInicialSolicitacao" maxlength="10" />
    <label for="dataFinalSolicitacao">Solicita&ccedil;&atilde;o Final</label>
    <input type="text" class="data skipOrFillDatasSolicitacao atLeastOneRequired" id="dataFinalSolicitacao" value="" size="12" name="filtro.dataFinalSolicitacao" maxlength="10" />
    <br />
    <label for="dataInicialLiberacao">Libera&ccedil;&atilde;o Inicial</label>
    <input type="text" class="data skipOrFillDatasLiberacao atLeastOneRequired" id="dataInicialLiberacao" value="" size="12" name="filtro.dataInicialLiberacao" maxlength="10" />
    <label for="dataFinalLiberacao">Libera&ccedil;&atilde;o Final</label>
    <input type="text" class="data skipOrFillDatasLiberacao atLeastOneRequired" id="dataFinalLiberacao" value="" size="12" name="filtro.dataFinalLiberacao" maxlength="10" />
    <br />
    <label for="dataInicialInternacao">Interna&ccedil;&atilde;o Inicial</label>
    <input type="text" class="data skipOrFillDatasInternacao atLeastOneRequired" id="dataInicialInternacao" value="" size="12" name="filtro.dataInicialInternacao" maxlength="10" />
    <label for="dataFinalInternacao">Interna&ccedil;&atilde;o Final</label>
    <input type="text" class="data skipOrFillDatasInternacao atLeastOneRequired" id="dataFinalInternacao" value="" size="12" name="filtro.dataFinalInternacao" maxlength="10" />
    <br />
    <button>Consultar</button>
    <button type="reset">Limpar</button>
</form>

JavaScript的:

$(".data").mask("99/99/9999").datepicker();

$("form").validate({
    rules: {
        "filtro.dataInicialSolicitacao": {
            skip_or_fill_minimum: [2, ".skipOrFillDatasSolicitacao"],
            require_from_group: [2, ".atLeastOneRequired"]
        },
        "filtro.dataFinalSolicitacao": {
            skip_or_fill_minimum: [2, ".skipOrFillDatasSolicitacao"],
            require_from_group: [2, ".atLeastOneRequired"]
        },
        "filtro.dataInicialInternacao": {
            skip_or_fill_minimum: [2, ".skipOrFillDatasInternacao"],
            require_from_group: [2, ".atLeastOneRequired"]
        },
        "filtro.dataFinalInternacao": {
            skip_or_fill_minimum: [2, ".skipOrFillDatasInternacao"],
            require_from_group: [2, ".atLeastOneRequired"]
        },
        "filtro.dataInicialLiberacao": {
            skip_or_fill_minimum: [2, ".skipOrFillDatasLiberacao"],
            require_from_group: [2, ".atLeastOneRequired"]
        },
        "filtro.dataFinalLiberacao": {
            skip_or_fill_minimum: [2, ".skipOrFillDatasLiberacao"],
            require_from_group: [2, ".atLeastOneRequired"]
        }
    },
    groups: {
        datasSolicitacao: "filtro.dataInicialSolicitacao filtro.dataFinalSolicitacao",
        datasLiberacao: "filtro.dataInicialLiberacao filtro.dataFinalLiberacao",
        datasInternacao: "filtro.dataInicialInternacao filtro.dataFinalInternacao",
        todos: "filtro.dataInicialSolicitacao filtro.dataFinalSolicitacao filtro.dataInicialLiberacao filtro.dataFinalLiberacao filtro.dataInicialInternacao filtro.dataFinalInternacao"
    },
    errorContainer: "#msgErros ul",
    errorLabelContainer: "#msgErros",
    wrapper: "li"
});

这是一个fiddle,最后有一个更大的群体。要测试它只需输入开始日期并按“咨询”,当我需要三个时,你只会收到一条消息。然后按“Limpar”,然后按“Consultar”,您将只收到一条正确的消息。

这是第一个fiddle的变体,其中包含较大的群组。要测试它只需输入开始日期并按“咨询”,您将收到三条消息,每行一条,这是正确的。然后按“Limpar”,然后按“Consultar”,你也会收到三条消息,这是不正确的。

关于如何在两种情况下都采取正确行为的想法?

0 个答案:

没有答案