jQuery以编程方式删除验证突出显示
表单有两个复选框(cbDeclined和cbIsOOfFac)、两个文本字段和一个下拉列表(txtHeight、txtWeight、ddlDevice) 如果选中任一复选框,则其他控件将被禁用,而其他控件的规则不适用。以下是当前的规则:jQuery以编程方式删除验证突出显示,jquery,jquery-validate,Jquery,Jquery Validate,表单有两个复选框(cbDeclined和cbIsOOfFac)、两个文本字段和一个下拉列表(txtHeight、txtWeight、ddlDevice) 如果选中任一复选框,则其他控件将被禁用,而其他控件的规则不适用。以下是当前的规则: $('form').validate({ highlight: function (element, errorClass) { $(element).addClass("invalidElem"); }, unhighl
$('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中输入一些内容,单击submit以使ddlDevice和txtHeight都高亮显示,因为它们是必需的,然后。。。用户单击cbDeclined和cbIsOOfFac。亮点不会消失。我试图弄清楚如何在高度周围突出显示,然后下降消失
我试图创建一个完全工作的jsFiddler,但是我无法让任何东西工作,尽管一切看起来都是正确的。这是链接(我无法发布链接,所以我对其进行了一些扩展)
jsiddle dot net/scarlton/9hDZQ/12/
如果删除最后一个/12/,您将看到我的第一个版本,它是从真实内容中剪切/粘贴的
根据建议,我尝试添加$('form')。valid();许多地方 当我将其添加到UpdateTextBoxes()函数的末尾时,它们一开始是高亮显示的,而不是我想要的 当我在任意一个单选按钮的click()事件后添加它时,文本将消失,但实际控件保持高亮显示。规则的required属性上的函数可能没有完全工作。真正有趣的是:当我输入一个高度时,点击,然后重量和设备会突出显示,并在下面显示错误消息。当我点击其中一个单选按钮时,文本消失,但高亮显示不消失。但是高度没有突出显示,它保持正常。工作小提琴:(缺少突出显示CSS样式,但类被正确添加/删除) 当您选中其中一个复选框时,没有代码告诉验证插件重新检查表单。添加
$('form').valid()代码>在每个单击处理程序的底部强制我重新验证:
cbDeclined.click(function () {
if (cbDeclined.is(':checked'))
cbIsOOfFac.attr('checked', false);
UpdateTextBoxes();
$('form').valid();
});
cbIsOOfFac.click(function () {
if (cbIsOOfFac.is(':checked'))
cbDeclined.attr('checked', false);
UpdateTextBoxes();
$('form').valid();
});
首先,你有没有想过为什么这个例子不起作用?这本身对我来说毫无意义。我添加了一些您推荐的代码,结果很有趣,但从未完全成功。由于篇幅和格式的原因,我将把这些细节放在原始文章中。我通过切换到jQuery并从表单元素中删除onsubmit处理程序,使JSFIDLE正常工作(基于您的原始版本)。还编辑了我的答案-你是对的,updatetextboxs
放错地方了。在上面的点击处理程序中进行验证在链接的小提琴中对我有效。