0

我有一個div風格默認爲「display:none」,直到前一個字段被填寫完畢,並且它包含一個需要選擇的下拉列表。如何在使用jquery.validationEngine.js進行驗證時忽略隱藏的頁面元素?

如果在該div變爲可見之前提交頁面,驗證錯誤將顯示在頁面的左半部分。

這當然不是一個功能問題,但我一直在想,是否有一種方法可以讓驗證引擎忽略隱藏的元素。

到目前爲止,我已經嘗試過在creator's blog上指出的class =「validate [optional:Special]」:「可選:Special:僅當字段非空時驗證*請首先調用可選。它似乎沒有按照建議工作。

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

我使用jquery.validate還試圖「忽略」:

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

這可能是我的一個簡單的疏忽,我們拭目以待!謝謝。

+0

你怎麼「隱藏」你的元素? – lucifurious 2010-11-19 02:36:43

+0

從http://stackoverflow.com/questions/2623514/jquery-validate-ignore-elements-with-style:「元素可以被認爲隱藏的原因有幾個: 它們的顯示值爲無。 它們是表單元素與類型=「隱藏」 它們的寬度和高度顯式設置爲0. 祖先元素被隱藏,因此該元素不會顯示在頁面上 – 2010-11-19 14:07:50

+0

如果您實際上在技術上意味着「如何」我隱藏它們 - 一旦郵政編碼字段被填寫和驗證,我將顯示具有「display:inherit;」的元素 – 2010-11-19 14:10:00

回答

1

我最終解決了這個問題,通過隱藏和顯示元素的函數添加和刪除驗證[必需]類屬性。

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

這很有效地避免了在隱藏需要驗證的頁面元素時出現在奇怪位置的驗證錯誤消息。

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(真);

相關問題