TextBox를 사용한 AutoPostback은 초점을 잃습니다
-
05-07-2019 - |
문제
ㅏ 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>