2011-12-08 5 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

関連する問題