我有以下HTML:
<div class='headerWithYesNo'>
<p>Text....</p>
<div class='choices'>
<input type="radio" name="choices" value="yes" />
<input type="radio" name="choices" value="no" />
</div>
<div class='headerWithYesNoChild hidden'>
<input type="checkbox" />
<input type="checkbox" />
</div>
</div>
我有一个jquery验证器,要求用户选择是或否。当用户选择“是”时,显示“headerWithYesNoChild”div。如果选择是,我想要求用户选择其中一个复选框。所以我添加了以下自定义验证器:
jQuery.validator.addMethod("headerWithYesNo", function(value, element) {
//If the value === no return valid
if (value === 'no') return true;
var yesNoChild = $(element).closest('.headerWithYesNo').children('.headerWithYesNoChild');
var checkedInputs = yesNoChild.find('input:checked');
//If any inputs are checked, return valid
if (checkedInputs.length > 0) {
return this.optional(element);
}
return false;
});
我使用以下JavaScript添加验证器:
$('.headerWithYesNo .choices input:radio').each(function () {
$(this).rules("add", {
headerWithYesNo: true,
messages: {
headerWithYesNo: "Make a selection from the options below or select 'No'"
}
})
});
我添加到验证功能的唯一选项是更改错误放置:
$('form').validate({
errorPlacement: function(error, element) {
... error placement logic
}
});
这很有效...有一个问题。选择yes后,将在用户有机会进行选择之前触发验证。我希望在用户选择“否”(清除任何失败的验证)或表单提交时触发验证。我怎样才能做到这一点?
答案 0 :(得分:1)
我最终做的是在我的规则中添加depends
:
$('.headerWithYesNo .choices input:radio').each(function () {
$(this).rules("add", {
headerWithYesNo: {
depends: function(element) {
var targetType = $(event.target).attr('type');
if (element.value === 'no' || targetType === 'submit') {
return true;
}
return false;
}
},
messages: {
headerWithYesNo: "Make a selection from the options below or select 'No'"
}
})
});
因此,如果收音机的价值是“不”。 required设置为true。或者,如果目标是提交输入。不过我认为@Sparky对onclick提出了一些很好的建议,我只是无法弄清楚如何将它应用于一条规则。我对此有更多的反馈意见。