在使用jquery.validationEngine.js进行验证时,如何忽略隐藏的页面元素?

时间:2010-11-18 22:03:36

标签: javascript jquery jquery-validate client-side-validation

我有一个div的样式默认为“display:none”,直到填写了前一个字段,并且它包含一个需要选择的下拉列表。

如果在此div显示之前提交了页面,则验证错误将显示在页面的左半部分。

这当然不是一个功能问题,但我一直想知道是否有办法让验证引擎忽略隐藏的元素。

到目前为止,我已尝试在creator's blog上指出class =“validate [optional:Special]”:“optional:Special:仅在字段不为空时验证*请先调用可选项”。它似乎没有按照建议起作用。

<div id="container" style="display: none;">
   ...
   <select id="mapLocation" onchange="moveMapToCenter();" class="validate[optional: Special]" />
   ...
</div> 

我也尝试过使用jquery.validate“ignore”:

$(document).ready(function() {
   $("#aspnetForm").validationEngine({
      ignore: ":hidden"
      success: false,
      failure: function() {}
   })
});

这可能是我的一个简单的疏忽,我们会看到!感谢。

2 个答案:

答案 0 :(得分:1)

我最后通过隐藏和显示元素的函数添加和删除验证[required]类属性来解决这个问题。

function showContainer() {
   ...
   $("#mapLocation").addClass("validate[required]");
   ...
}
function hideContainer() {
   ...
   $("#mapLocation").removeClass("validate[required]");
}

这样可以很好地避免在隐藏需要验证的页面元素时出现在奇怪位置的验证错误消息。

答案 1 :(得分:0)

我需要禁用临时更多字段,我做这个,一个非常好的解决方案: 一个小jquery扩展:

jQuery.extend(jQuery.fn, {
    switchValidationEngine: function (enable) {
        $.each(this, function (i, n) {
            var field = $(n);
            var rulesParsing = field.attr("class");
            var newVal = enable ? rulesParsing.replace(/validate_not\[/g, "validate[") : rulesParsing.replace(/validate\[/g, "validate_not[");
            field.attr("class", newVal);
        });
    }
});

禁用字段验证的用法:

  

$( “#txtModel”)switchValidationEngine(假);

重新启用字段验证的用法:

  

$( “#txtModel”)switchValidationEngine(真);