簡體   English   中英

展開無效驗證的手風琴窗格

[英]Expanding an Accordion Pane on Invalid Validation

我有一個AccordionPanes集合,其中包含各種TextBox控件和DropDownLists,每個控件都有自己的驗證器。

如果在表單提交時進行了一些服務器端驗證,是否可以自動展開包含無效驗證器消息的先前最小化的窗格? 否則,用戶似乎無法無故提交表單。

另一種情況:假設我有多個窗格,其中的客戶端驗證程序與輸入綁定在一起。 如果將窗格最小化(因此您看不到驗證器的ErrorMessage),那么在提交時進行AJAX頁面驗證時,是否有辦法擴展相應的窗格?

我知道這種方法有一種蠻力的方式,我跟蹤每個驗證器及其關聯的AccordionPane,但是我希望有一個更好的解決方案,可以處理大量輸入/驗證器和窗格的情況。

這樣的事情怎么樣(使用JQuery,但我確定它可以轉換為純JavaScript)...

$(document).ready(function(){
    if (isPostback()){
        $.each(Page_Validators, function(index, validator) {
            if (!validator.isvalid) {
            // do something here to locate the accordion based on the validator
            // $(this) is the currently invalid validator element as a jquery object/wrapped set
            // so for example...
                $(this).parent().slideDown();
            // This assumes that the immediate parent of of the validator is the accordion which is unlikely but if you post your emitted html I can write the appropriate selector for you.  
            }
        });
    }
});

因為您不希望它在初始負載時觸發,所以可以使用類似這樣的技術: 如何在javascript中檢測/跟蹤回發? 並檢查您是否在文檔之后進行回發。准備好-我假設您已使用鏈接中的建議,並且用於回發檢測的函數稱為isPostback()。

Rich擊敗了我,但這是香草js版本(ie9 +):

Page_Validators
    .filter(function(v) { return !v.isvalid; })
    .forEach(function (v) { console.log(v.parentNode); });

請記住將代碼放在</ form>-標簽下。 我在使用jQuerys document.ready和window.onload時遇到問題,因為它可能在從asp.net加載所有需要的JavaScript之前執行代碼。

更新:與瀏覽器兼容的版本

for(var i = 0; i < Page_Validators.length; i++) {
    var validator = Page_Validators[i];
    if (!validator.isvalid) {
        console.log(validator.parentNode);
    }
}

有一個針對該問題構建的項目,請嘗試看一看。...您也可以下載源代碼以分析更多詳細信息,或者根據需要使用相同的代碼庫。... http://www.codeproject .com / Articles / 43397 / Validating-Accordion-and-RadPanelBar-using-Ajax-an

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM