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?

Foi útil?

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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top