AutoPostback com TextBox perde o foco
-
05-07-2019 - |
Pergunta
A TextBox
está definido para AutoPostback
como mudar o valor deve causar uma série de (apenas para exibição) campos a serem recalculados e exibidos.
Esta coima funciona.
No entanto, quando o campo é tabulado fora, o foco brevemente se move para o próximo campo, em seguida, desaparece quando a página é redesenhada para que não haja qualquer foco.
Eu quero o foco para estar no novo campo, não a caixa de texto que eu apenas mudou. Existe uma maneira de descobrir qual campo tinha o foco e forçá-lo para tê-lo novamente quando a página é redesenhada?
Solução
Este é "por design". Se você estiver usando ASP.NET 2.0 + você pode tentar chamar o método foco de sua caixa de texto uma vez ocorre a postagem (de preferência em caso TextChanged do TextBox).
Eu não tenho certeza se houver qualquer built-in maneira de controlar o foco, mas eu achei este artigo em CodeProject que deve fazer o truque.
Outras dicas
Você também pode considerar atualização apenas para exibição campos usando AJAX UpdatePanel . Desta forma, você não vai perder o foco do novo campo.
Também propus server-side pura baseado em WebControl.Controls .TabIndex análise, você pode usá-lo, se quiser.
Isto é o que está acontecendo:
1) TAB em um campo - cliente evento
2) Concentre-se no próximo campo - cliente evento
3) Postback - servidor de eventos
4) Página redesenhado - evento de cliente nova página substituições preious eventos do cliente
A solução do seu problema é:
a) obter o elemento que ganhou foco Antes de postback
<script>
var idSelected;
$("input").focusin(function () {
idSelected = this.id;
});
</script>
b) armazenar o ClientID (na verdade, em var idSelected
) em algum lugar (isto é, uma caixa de texto oculto, vith ViewState = true) antes de postback
** b) get ClientID ** (extrato de TextBox ocultos e colocá-lo em var idSelected
) após a postagem
d) obter o elemento com ClientID e foco set DEPOIS postback
<script>
$(document).ready(function () {
if (idSelected != null) {
$("#" + idSelected).focus();
idSelected = null;
});
});
</script>
Nota: Esta scripts de exemplo usar JQuery
.
Lembre-se de colocar Jquery.js
em sua solução e uma referência em sua página
<form id="form1" runat="server" enctype="multipart/form-data" method="post">
<asp:ScriptManager runat="server" >
<Scripts>
<asp:ScriptReference Path="~/Scripts/jquery.js" ScriptMode="Auto" />
....
Nota 2:. Esta solução funciona sem AJAX
Olhada esta resposta : a tornar o trabalho Javascript sobre Ajax você deve usar um código como este:
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
function EndRequestHandler(sender, args)
{
MyScript();
}
</script>