2010-03-22 41 views
6

我已經繼承了一些代碼,它使用div將頁面分成多個標籤。在第一頁上有許多必需的字段和正則表達式驗證器。問題是用戶可以切換到另一個選項卡,觸發回發並使第一頁上的驗證器失敗,從而導致混亂。如何在回發之前在客戶端上調用RequiredFieldValidator

我想要做的是在用戶選擇另一個選項卡時在第一頁上執行驗證,從而防止它們移到新選項卡,直到第一頁有效。

<ul>       
    <li><a href="#tab1">Tab 1</a> </li> 
    <li><a href="#tab2" onclick="return isValid();">Tab 2</a></li> 
    <li><a href="#tab3" onclick="return isValid();">Tab 3</a></li> 
</ul> 

其中isValid需要啓動驗證器。

謝謝!

UPDATE:由codeka提供的答案是非常接近,但是,因爲我需要同時提供href和的onclick屬性(以避免搞亂顯示),標籤(錨)開關仍然發生,即使驗證失敗。這是我解決這個問題的方法。免責聲明:難看的代碼提前

<ul>       
    <li><a id="tab1Tab" href="#tab1" style="display:none"/><a onclick="isValid('tab1');">Tab 1</a></li> 
    <li><a id="tab2Tab" href="#tab2" style="display:none"/><a onclick="isValid('tab2');">Tab 2</a></li> 
    <li><a id="tab3Tab" href="#tab3" style="display:none"/><a onclick="isValid('tab3');">Tab 3</a></li> 
</ul> 

function isValid(tab) { 
    var valid = Page_ClientValidate(); 
    var tabId = (valid ? tab : "tab1") + "Tab"; 
    $("#" + tabId).click(); 
} 

請注意使用jQuery的跨瀏覽器兼容性與點擊事件。這隻適用於其他選項卡上沒有驗證器的情況,根據Thomas的回答,如果有任何添加,我需要在isValid中使用驗證組和額外的邏輯。

回答

2

ASP.NET創建一個全局javascript函數Page_ClientValidate,你可以打電話到火驗證:

function isValid() { 
    return Page_ClientValidate(); 
} 
+0

+1謝謝,只要在其他選項卡上沒有其他驗證程序,就應該可以工作,我最好現在檢查:) – si618 2010-03-22 00:34:22

+0

您也可以傳遞要驗證的驗證組,例如:Page_ClientValidate( 「Registration」);' – 2010-03-22 00:40:24

+0

這非常接近,驗證器正在點擊onclick,但即使返回「false」,錨仍然被移動到另一個標籤。 – si618 2010-03-22 00:58:39

2

您可以嘗試使用每個選項卡驗證組。從一個選項卡中單擊到另一個,你會叫的東西,像這樣在標籤名代表確認團組:

function TabValidate(tabName) { 
    if (Page_ClientValidate(tabName)) { 
     //do stuff 
    } 
} 

加成我的評論中提到這一點,但我想我會添加到我的帖子。如果在其他選項卡上沒有任何其他驗證程序,那麼另一個解決方案是簡單地標記其他選項卡上的其他.NET控件,這些控件可以使用CausesValidation =「false」觸發回發(例如,使用AutoPostBack =「true」的DropDownLists)

+0

+1謝謝,其他選項卡上沒有驗證器,但有很好的信息。 – si618 2010-03-22 00:42:24

+0

如果在其他選項卡上沒有任何其他驗證程序,則另一種解決方案是簡單地標記其他選項卡上的其他.NET控件,這些控件可以使用CausesValidation =「false」觸發回發(例如,使用AutoPostBack =「true」的DropDownLists) 。 – Thomas 2010-03-22 00:54:52

相關問題