该表单有两个复选框(cbDeclined 和 cbIsOOfFac)、两个文本字段和一个下拉列表(txtHeight、txtWeight、ddlDevice)。
如果选中任一复选框,则禁用其他控件并且其他控件的规则不适用。以下是目前的规则:
$('form').validate({
highlight: function (element, errorClass) {
$(element).addClass("invalidElem");
},
unhighlight: function (element, errorClass) {
$(element).removeClass("invalidElem");
},
errorPlacement: function (error, element) {
var parent = element.parent();
parent.append(error);
},
errorElement: "div",
errorClass: "errorMsg"
});
function HeightWeightCtrlsEnabled() { return !cbDeclined.is(':checked') && !cbIsOOfFac.is(':checked'); }
txtHeight.rules("add", { required: function (element) { return HeightWeightCtrlsEnabled(); }, maxlength: 3, min: 1, digits: true });
txtWeight.rules("add", { required: function (element) { return HeightWeightCtrlsEnabled(); }, maxlength: 4, min: 1, digits: true });
ddlDevice.rules("add", { required: function (element) { return HeightWeightCtrlsEnabled(); } });
function UpdateTextBoxes() {
var disableCtrls = !HeightWeightCtrlsEnabled();
txtHeight.prop('disabled', disableCtrls);
txtWeight.prop('disabled', disableCtrls);
ddlDevice.prop('disabled', disableCtrls);
if (disableCtrls) {
txtHeight.val('');
txtWeight.val('');
ddlDevice.val('');
}
}
cbDeclined.click(function () {
if (cbDeclined.is(':checked'))
cbIsOOfFac.attr('checked', false);
UpdateTextBoxes();
});
cbIsOOfFac.click(function () {
if (cbIsOOfFac.is(':checked'))
cbDeclined.attr('checked', false);
UpdateTextBoxes();
});
问题出现在以下情况下:用户在 txtWeight 中输入内容,单击提交以使 ddlDevice 和 txtHeight 都突出显示,因为它们是必需的,然后...用户单击 cbDeclined 和 cbIsOofFac。亮点不会消失。我试图弄清楚如何在高度周围突出显示并下降以消失。
我试图创建一个完全正常工作的 jsFiddler,但我无法让任何东西工作,尽管一切看起来都是正确的。这是链接(我不能发布链接,所以我扩大了一点)
jsfiddle dot net/scarleton/9hDZQ/12/
如果您删除最后一个 /12/,您将看到我的第一个版本,它是从真实的东西中剪切/粘贴的。
根据建议,我尝试添加 $('form').valid(); 一些地方。
当我将它添加到 UpdateTextBoxes() 函数的末尾时,它们开始突出显示,而不是我想要的。
当我在任一单选按钮的 click() 事件之后添加它时,文本会消失,但实际控件保持突出显示。看起来规则所需属性的功能可能没有完全工作。真正有趣的是:当我输入一个高度时,点击 ,然后重量和设备会突出显示,并在它们下方显示错误消息。当我单击其中一个单选按钮时,文本会消失,但突出显示不会。但是......高度没有突出显示,它保持正常。