문제

TextBox 설정되었습니다 AutoPostback 값을 변경하면 여러 (디스플레이 전용) 필드가 다시 계산되고 표시되어야합니다.
잘 작동합니다.

그러나 필드가 탭에서 벗어나면 초점이 다음 필드로 간단히 이동 한 다음 페이지가 다시 그려지면 사라져서 어디에도 초점이 없습니다.

방금 변경 한 텍스트 상자가 아니라 새로운 필드에 초점을 맞추고 싶습니다. 페이지를 다시 그릴 때 어떤 필드가 초점을 맞추고 강제로 그것을 강요 할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

이것은 "디자인"입니다. ASP.NET 2.0+를 사용하는 경우 PostBack이 발생하면 (바람직하게는 TextBox의 TextChanged 이벤트에서) TextBox의 초점 메소드를 호출하십시오.

초점을 추적하는 내장 방법이 있는지 확실하지 않지만 이것 트릭을 수행 해야하는 CodeProject의 기사.

다른 팁

AJAX를 사용하여 새로 고침 디스플레이 전용 필드를 고려할 수도 있습니다 UpdatePanel. 이렇게하면 새로운 분야에서 초점을 잃지 않을 것입니다.

또한 순수한 서버 측을 제안했습니다 해결책 기반 WebControl.controls.tabindex 분석, 원하는 경우 사용할 수 있습니다.

이것이 일어나는 일입니다.

1) 필드의 탭 - 클라이언트 이벤트
2) 다음 필드 - 클라이언트 이벤트에 중점을 둡니다
3) Postback- 서버 이벤트
4) Page Redrawn- 클라이언트 이벤트 새 페이지가 Preious 클라이언트 이벤트를 무시합니다.

문제의 해결책은 다음과 같습니다.

a) 초점을 맞춘 요소를 얻으십시오 Postback 전에

<script>
var idSelected;
 $("input").focusin(function () {
         idSelected = this.id;
    });
</script>

b) ClientID를 보관하십시오 (실제로 var idSelected) 어딘가에 (즉, 숨겨진 텍스트 상자, vith viewstate = true) postback 전에

** b) clientId get clientId ** (숨겨진 텍스트 상자에서 추출하여 넣습니다. var idSelected) 후 후

d) clientID로 요소를 얻고 초점을 설정합니다. 포스트 백 후

<script>
$(document).ready(function () {
  if (idSelected != null) {
       $("#" + idSelected).focus();
       idSelected = null;
     });
});
</script>

참고 :이 샘플 스크립트는 사용합니다 jQuery.
넣어야합니다 Jquery.js 귀하의 솔루션과 페이지의 참조

<form id="form1" runat="server" enctype="multipart/form-data" method="post">
   <asp:ScriptManager   runat="server" >
  <Scripts>
   <asp:ScriptReference Path="~/Scripts/jquery.js" ScriptMode="Auto" />
....

Note2 :이 솔루션은 작동합니다 Ajax없이.
보다 이 답변: ajax를 통해 JavaScript가 작동하도록하려면 다음과 같은 코드를 사용해야합니다.

<script type="text/javascript">
  Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);

  function EndRequestHandler(sender, args)
  {
    MyScript(); 
  }   
</script>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top