Javascript jQuery验证验证禁用的输入字段

Javascript jQuery验证验证禁用的输入字段,javascript,jquery,jquery-validate,Javascript,Jquery,Jquery Validate,我已经使用jQuery验证为我的表单设置了验证。不幸的是,有时我想调用$(“#clientConfigurationForm”).valid(),在用户启用/禁用复选框时强制重新计算。我希望当前无效的输入表单在被禁用并调用.valid()时被忽略(并失去验证状态)。目前这种情况还没有发生。我怎样才能让它工作 复选框事件 $("#clientConfigurationForm").on("change","input[type=checkbox]",function(){ $(this)

我已经使用jQuery验证为我的表单设置了验证。不幸的是,有时我想调用
$(“#clientConfigurationForm”).valid()
,在用户启用/禁用复选框时强制重新计算。我希望当前无效的输入表单在被禁用并调用
.valid()
时被忽略(并失去验证状态)。目前这种情况还没有发生。我怎样才能让它工作

复选框事件

$("#clientConfigurationForm").on("change","input[type=checkbox]",function(){
    $(this)
        .closest("div")
        .find("input, select")
        .not(this)
        .not(":submit")
        .prop("disabled", !$(this).prop("checked"))
        .each(function(){
            $(this).valid();
        });
});
验证代码

$("#clientConfigurationForm").validate({
    onkeyup: function (element) {
        $(element).valid();
    },
    focusInvalid: false,
    invalidHandler: function(form, validator) {
        if (!validator.numberOfInvalids())
            return;

        // Find out what my ID is
        var formIndex = $(validator.errorList[0].element).prop("id").replace(/[A-Za-z]+/g, '');
        $("#clientSettingsLinks a").eq(formIndex).trigger("click");
    },
    errorPlacement: function (error, element) {
        var parent = $(element).parent();
        var validationContainer = parent.find(".validationResult");

        if (validationContainer.length == 0){
            validationContainer = $('<span class="validationResult"><i class="'+errorIconClass+' inputValidationIcon"></i></span>');
            parent.append(validationContainer);
        }

        validationContainer.addClass("tooltip").attr("title", error.text());
    },
    highlight: function (element, errorClass, validClass) {
        $(element).parent().find("i").removeClass("icon-ok").addClass(errorIconClass);

        $(element).addClass("error");
    },
    unhighlight: function (element, errorClass, validClass) {
        $(element).parent().find("i").removeClass(errorIconClass).addClass("icon-ok");
        $(element).parent().find("span.validationResult.tooltip").removeClass("tooltip").attr("title", "");

        $(element).removeClass("error");
    },
    submitHandler: function(form) {
        alert("SUBMITTED YO");
    }
});
$(“#客户端配置表单”)。验证({
onkeyup:函数(元素){
$(元素).valid();
},
焦点无效:错误,
invalidHandler:函数(表单、验证器){
如果(!validator.numberOfInvalids())
返回;
//找出我的身份证是什么
var formIndex=$(validator.errorList[0].element).prop(“id”).replace(/[A-Za-z]+//g');
$(“#客户端设置链接a”).eq(formIndex).trigger(“单击”);
},
errorPlacement:函数(错误,元素){
var parent=$(元素).parent();
var validationContainer=parent.find(“.validationResult”);
if(validationContainer.length==0){
validationContainer=$('');
append(validationContainer);
}
validationContainer.addClass(“工具提示”).attr(“标题”,error.text());
},
突出显示:函数(元素、errorClass、validClass){
$(element).parent().find(“i”).removeClass(“图标确定”).addClass(errorIconClass);
$(元素).addClass(“错误”);
},
取消高亮显示:函数(元素、errorClass、validClass){
$(element).parent().find(“i”).removeClass(errorIconClass).addClass(“图标确定”);
$(element).parent().find(“span.validationResult.tooltip”).removeClass(“tooltip”).attr(“title”,”);
$(元素).removeClass(“错误”);
},
submitHandler:函数(表单){
警报(“已提交”);
}
});
提交和重置类型的输入总是被忽略,禁用的元素也是如此

然而,你似乎发现了一些奇怪的事情

这很有效


如果我删除了所有的验证自定义,它仍然有相同的问题请参阅我问题的第一个代码块,是的,我有!这确实很奇怪,因为我认为这是标准的行为:/
.prop(“禁用”)、!$(此).prop(“选中”)
请查看更新-我希望被否决的人将重置或升级该操作!有一个棘手的问题,错误图标(我自定义放置的一个)没有被删除,即使输入框删除了它的
错误
类你能调用val.unhighlight()吗?你能详细说明一下这个问题吗:@mplungjan谢谢你的回复,请检查更新-如果您注意到,如果您在输入框中使验证失败,请勾选复选框以禁用它,则验证不会被删除。
var val;
$("#clientConfigurationForm").on("change", "input[type=checkbox]", function () {
    val.resetForm();
    $(this)
        .closest("div")
        .find("input, select")
        .not(this)
        .not(":submit")
        .prop("disabled", !$(this).prop("checked"))
        .not(":disabled")  
        .each(function () {
          $(this).valid();
        });
});

val = $("#clientConfigurationForm").validate({

    onkeyup: function (element) {
        $(element).valid();
    },
    focusInvalid: false,
    submitHandler: function (form) {
        alert("submitted");
    }
});