在jquery验证中清除已禁用元素的验证消息和错误样式

时间:2016-12-14 15:35:26

标签: jquery jquery-validate

我有一个场景,其中某些文本框被有条件地禁用。 问题是如果首先验证元素然后禁用验证消息并且错误css保持不变。

我可以手动删除邮件和样式,但后来我们违反了框架的使用。

有没有办法可以使用jquery验证框架中的内置事件/函数来检查元素是否被禁用,然后删除错误类和相应的消息。

我正在使用以下类似任务之一但不完全相同。

showErrors: function (errorMap, errorList) {
    var objManualMsgId = [];

    objManualMsgId.push('MSG2');
    objManualMsgId.push('MSG3');

    $.each(objManualMsgId, function (e) {
        $('#msgPane').find('div[id=' + objManualMsgId[e] + ']').remove();
    });

    this.defaultShowErrors();
},

以下是一个示例fiddle和一些代码。

首先单击“验证”按钮,然后在textbox1和textbox4

中输入值
    $(function(){

$("#f3").validate({
    onclick: false,
    onfocusout: false,
    errorContainer: '#errorContainer',
    errorLabelContainer: $("ol", '#errorContainer'),
    wrapper: 'li',
    meta: "validate",

    rules: {
        // note: you can use variable to avoid repeating 
        // of the same code
        a: {
                    validateRequired: ['L', $('#a'), $('#b') , $('#c') , $('#d')]
        },
        b: {
                    validateRequired: ['W', $('#a'), $('#b') , $('#c') , $('#d')]
        },
        c: {
                    validateRequired: ['H', $('#a'), $('#b') , $('#c') , $('#d')]
        },
        d: {
                    validateRequired: ['D', $('#a'), $('#b') , $('#c') , $('#d')]
        }
    },
    success: function(label) {
        //label.html(" ").addClass("checked"); 
    },
    submitHandler: function() {
        alert('successful submit');
    }
});

$.validator.addMethod("validateRequired", function(value, element, options) {

    var objCaller = options[0],
        objA = $(options[1]),
        valA = objA.val().trim(),
        objB = $(options[2]),
      valB = objB.val().trim(),
      objC = $(options[3]),
      valC = objC.val().trim(),
      objD = $(options[4]),
      valD = objD.val().trim(),
      returnVal,
        isAEnabled = true,
            isBEnabled = true,
            isCEnabled = true,
            isDEnabled = true;

if(objCaller == 'L' && !valA)
        return false;
else
    returnVal = true;

if(objCaller == 'W' && !valB)
        return false;
else
    returnVal = true;

if(objCaller == 'H' && !valC)
        return false;
else
    returnVal = true;

if(objCaller == 'D' && !valD)
        return false;
else
    returnVal = true;

    return returnVal;

}, function (param, element) {     

    var errormessage = $.validator.format('{0} can not be left blank', $(element).name);

    return errormessage;

});

1 个答案:

答案 0 :(得分:0)

您需要在处理程序中使用Foo mockFoo = mock(Foo.class) // mockFoo is an instance of a Foo$MockitoMock Foo o = doAnswer(ans).when(mockFoo); // mockFoo just became null at this point..?! o.foo(any()); 强制进行验证测试。同时添加.valid()事件......

keyup

DEMO:http://jsfiddle.net/vLv09Let/4/

你的代码中的其他地方也有一些非常奇怪的东西。由于表单有效且没有更多验证错误,因此元素上不应该有$(document).on('blur keyup', '#a, #b, #c, #d', function(e) { e.preventDefault(); var options = ['x', '#a', '#b', '#c', '#d']; enableDisable(options); $("#f3").valid(); // <- force validation test }); 类。它可能与它们被禁用有关,并且您必须在禁用它们时删除.error类。