javascript - jQuery 验证验证禁用的输入字段

标签 javascript jquery jquery-validate

我已经使用 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");
    }
});

最佳答案

Documentation: 提交和重置类型的输入始终被忽略,禁用元素也是如此。

不过你似乎发现了一些奇怪的东西。

这行得通

Live Demo

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");
    }
});

关于javascript - jQuery 验证验证禁用的输入字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18700950/

相关文章:

JavaScript 正则表达式 : Match Up to Or Between But Not Including

javascript - 在 jQuery 中使用 typeof 运算符时遇到问题

javascript - 将 div 附加到 iframe

javascript - 将输入框调整为内容 onload

插入 DOM 的表单的 jQuery 验证

javascript - 为什么使用带有 javascript : "protocol"? 的链接是不好的做法

javascript - 将事件参数与其他参数一起使用?

java - JQuery Ajax 调用 : How to fetch JsonArray?

asp.net-mvc - 在 ASP.net MVC 中通过 jQuery 在客户端本地化验证消息

asp.net - jQuery Validate 未触发回发方法