jQuery 验证插件需要一个字段,但不是两个
jQuery Validate plugin one field required, but not both
我有一个正在使用 jQuery 验证插件验证的表单,我只想填写一个字段,而另一个字段的值为 0(零)。但是,必须强制填写其中一项。
这是我的实际形式:
这是我的表格HTML:
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label> <span>Amount to Player</span></label>
<input name="AmountToHorse" type="text" class="form-control">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label> <span>Amount to Stable</span></label>
<input name="AmountToStable" type="text" class="form-control">
</div>
</div>
</div>
这是我的验证:
$('#reloadForm').validate({
rules: {
AmountToHorse: {
required: true,
number: true
},
AmountToStable: {
required: true,
number: true
},
}
});
关于如何做到这一点的任何线索?
您需要使用 the .addMethod()
method 编写自定义规则以确保只填写一个。
相应调整...
$(document).ready(function () {
$.validator.addMethod('onlyOne', function(value, element, param) {
return this.optional(element) || $('[name="' + param[0] + '"]').is(':blank');
}, "Please fill out only one of these fields");
$('#myform').validate({
rules: {
foo: {
onlyOne: ["bar"],
number: true
},
bar: {
onlyOne: ["foo"],
number: true
}
}
});
});
然后使用 blur keyup
处理程序来确保验证消息在 所有 字段上自行更新。同样,由于我不知道您在此表单上是否有其他字段,请调整这些选择器以仅针对相关和需要的内容。
$('input').on('blur keyup', function() {
$('#myform').valid(); // force validation on entire form
});
概念验证演示:http://jsfiddle.net/e01d5sw7/
编辑:
根据 OP 的评论,虽然不应同时填写两个字段,其中一个字段是 required
...
$.validator.addMethod('onlyOne', function(value, element, param) {
return ($(element).is(':filled') && $('[name="' + param[0] + '"]').is(':blank')) ||
(($('[name="' + param[0] + '"]').is(':filled')) && $(element).is(':blank'));
}, "Please fill out only one of these fields");
我有一个正在使用 jQuery 验证插件验证的表单,我只想填写一个字段,而另一个字段的值为 0(零)。但是,必须强制填写其中一项。
这是我的实际形式:
这是我的表格HTML:
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label> <span>Amount to Player</span></label>
<input name="AmountToHorse" type="text" class="form-control">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label> <span>Amount to Stable</span></label>
<input name="AmountToStable" type="text" class="form-control">
</div>
</div>
</div>
这是我的验证:
$('#reloadForm').validate({
rules: {
AmountToHorse: {
required: true,
number: true
},
AmountToStable: {
required: true,
number: true
},
}
});
关于如何做到这一点的任何线索?
您需要使用 the .addMethod()
method 编写自定义规则以确保只填写一个。
相应调整...
$(document).ready(function () {
$.validator.addMethod('onlyOne', function(value, element, param) {
return this.optional(element) || $('[name="' + param[0] + '"]').is(':blank');
}, "Please fill out only one of these fields");
$('#myform').validate({
rules: {
foo: {
onlyOne: ["bar"],
number: true
},
bar: {
onlyOne: ["foo"],
number: true
}
}
});
});
然后使用 blur keyup
处理程序来确保验证消息在 所有 字段上自行更新。同样,由于我不知道您在此表单上是否有其他字段,请调整这些选择器以仅针对相关和需要的内容。
$('input').on('blur keyup', function() {
$('#myform').valid(); // force validation on entire form
});
概念验证演示:http://jsfiddle.net/e01d5sw7/
编辑:
根据 OP 的评论,虽然不应同时填写两个字段,其中一个字段是 required
...
$.validator.addMethod('onlyOne', function(value, element, param) {
return ($(element).is(':filled') && $('[name="' + param[0] + '"]').is(':blank')) ||
(($('[name="' + param[0] + '"]').is(':filled')) && $(element).is(':blank'));
}, "Please fill out only one of these fields");