2011-12-08 58 views
0

我有一些控件CustomValidators像下面。但是,SetFocusOnError不起作用,如果驗證失敗,頁面不會跳轉到第一個控件。我可以在javascript中設置焦點,但問題在於總是無效的最後一個控件獲取焦點,這不是我想要的,我希望第一個無效的控件獲得焦點。CustomValidator SetFocusOnError不起作用

誰能告訴我如何解決這個問題?謝謝。

function ValidateRootCause(source, args) { 
    var status = document.getElementById("<%=statusDropDownList.ClientID %>"); 
    var RootCause = document.getElementById("<%=txtRootCause.ClientID %>"); 

    args.IsValid = true; 
    if (RootCause.value == "" && (status.value == 21 || status.value == 18)) { 
     args.IsValid = false; 
     RootCause.focus(); 
    } 
} 

     <tr> 
      <td width="45%">Root Cause (Why it Happens)<span class="littlefont">*</span>     
      <asp:CustomValidator ID="cvRootCause" runat="server" 
        ErrorMessage="Required Field!" CssClass="warning" 
        ClientValidationFunction="ValidateRootCause" ValidationGroup="formValidation" SetFocusOnError="True"> 
      </asp:CustomValidator> 
      </td> 
      <td width="55%"> 

       <asp:TextBox ID="txtRootCause" runat="server" TextMode="MultiLine" 
        MaxLength="1000"></asp:TextBox> 
      </td> 
     </tr> 

回答

1

創建一個名爲「focusGiven」或類似的東西的全局(在你的函數之外)JavaScript變量。在你的if()中,換一個if()檢查你的焦點調用。這樣它只會發生一次。

var focusGiven = false; 
function ValidateRootCause(source, args) { 
    var status = document.getElementById("<%=statusDropDownList.ClientID %>"); 
    var RootCause = document.getElementById("<%=txtRootCause.ClientID %>"); 

    args.IsValid = true; 
    if (RootCause.value == "" && (status.value == 21 || status.value == 18)) { 
     args.IsValid = false; 

     if (!focusGiven) { 
      RootCause.focus(); 
      focusGiven = true; 
     } 
    } 
} 
+0

這是一個非常好的主意和工作。謝謝。我需要添加的另一件事是在點擊Submit按鈕時將focusGive設置爲false。 – GLP