2011-12-08 3 views
0

나는 다음과 같은 CustomValidators 일부 컨트롤이 작동하지 않습니다. 그러나 SetFocusOnError가 작동하지 않으면 유효성 검사가 실패하면 페이지가 첫 번째 컨트롤로 이동하지 않습니다. 자바 스크립트에서 포커스를 설정할 수 있지만 문제는 항상 유효하지 않은 마지막 컨트롤이 포커스를 얻는다는 것입니다. 원하는 것은 아니며, 유효하지 않은 첫 번째 컨트롤에서 포커스를 얻고 싶습니다.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"또는 이와 비슷한 함수를 만듭니다. 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

정말 좋은 생각입니다했다. 감사. 추가 할 필요가있는 또 하나의 점은 제출 단추를 클릭하면 focusGive를 false로 설정한다는 것입니다. – GLP