我使用jQuery Validate 1.11.1和jQuery 1.11.0。
我有一个表单,它有三对开始/结束日期。对于每一对,我验证两个输入是否已填写或者没有填写,因为不允许填写开始日期而不是结束日期,反之亦然;另外,我不能在没有填写任何一对的情况下发送表格。
想象一下,用户只在开始日期输入日期,但在结束日期没有输入日期。我必须向他展示三条错误消息,每对一条消息。但如果用户没有输入任何数据,我只应向他发送一条错误消息。
问题在于我有四个组,每组一个,整个表格一个,换句话说,前三个是较大组的子组。
如果我最后将更大的组放在我的代码中,如果用户没有输入任何数据,我只会收到一条错误消息,但如果用户只输入了开始日期,我只会收到一条错误消息。如果我将较大的组放在开头,当用户输入刚开始日期时,我会收到三条错误消息,但如果用户发送一个空表单,则会收到三条相同的错误消息。
HTML:
<div id="msgErros"></div>
<form>
<label for="dataInicialSolicitacao">Solicitação Inicial</label>
<input type="text" class="data skipOrFillDatasSolicitacao atLeastOneRequired" id="dataInicialSolicitacao" value="" size="12" name="filtro.dataInicialSolicitacao" maxlength="10" />
<label for="dataFinalSolicitacao">Solicitaçã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ção Inicial</label>
<input type="text" class="data skipOrFillDatasLiberacao atLeastOneRequired" id="dataInicialLiberacao" value="" size="12" name="filtro.dataInicialLiberacao" maxlength="10" />
<label for="dataFinalLiberacao">Liberaçã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ção Inicial</label>
<input type="text" class="data skipOrFillDatasInternacao atLeastOneRequired" id="dataInicialInternacao" value="" size="12" name="filtro.dataInicialInternacao" maxlength="10" />
<label for="dataFinalInternacao">Internaçã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”,你也会收到三条消息,这是不正确的。
关于如何在两种情况下都采取正确行为的想法?