none
Problema como foco no textbox com Ajax e página é recarregada RRS feed

  • Pergunta

  • Olá,

    Tenho uma aplicação web que é executada por um coletor de dados que faz a leitura de um código de barras e o valor é armazenado em um textbox.

    O problema é o seguinte, nessa tela foi implementado Ajax para não recarregar a página todas as vezes que houver uma leitura de código de barras, porém, se eu colocar o foco no textbox (textbox.focus()) a página continua recarregando mesmo com Ajax e se eu não definir o foco no textbox e faço isso manualmente clicando no textbox, isso não acontece e o Ajax funciona.

    Resumindo, se eu colocar o foco no textbox pela aplicação (textbox.focus()) o Ajax não funciona, mas se eu colocar o foco manualmente, o Ajax funciona corretamente.

    Espero que alguém possa me ajudar.

    terça-feira, 18 de setembro de 2012 17:25

Respostas

  • Consegui resolver o meu problema com a seguinte lógica.

    No evento Page_InitComplete coloco o foco no textbox da seguinte maneira:

    ScriptManager.SetFocus(txtLeitura);

    Mas o truque para que a página não fizesse o recarregamento novamente, foi fazer um interação na página com o Timer do Ajax com o evento Tick de 1 segundo e apenas desativo o Timer dentro desse evento.

    Isso faz com que exista uma interação com a página e depois disso o Ajax funciona corretamente.

    Obs: William, obrigado pela atenção.

    quarta-feira, 19 de setembro de 2012 11:11

Todas as Respostas

  • Ta usando updatepanel não é?

    Tente isto:

    <script> 
    $(document).ready(function(){ 
    //seu código javascript/jquery aqui para ser executado no primeiro page_load 
    }); 
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    prm.add_endRequest(function() { 
    //seu código javascript/jquery aqui de novo para ser executado nos postbacks 
    }); 
    </script>;

    terça-feira, 18 de setembro de 2012 18:58
  • Olá Willian,

    Realmente estou utilizando o UpdatePanel juntamente com ScriptManager no Visual Studio 2010.

    Testei seu código e ocorreu o seguinte erro:

    Erro em tempo de execução do Microsoft JScript: '$' não está definido.

    Estou fazendo algo errado?

    <script type="text/javascript">
        $(document).ready(function () {
            var mytext = document.getElementById("TextBox1");
            mytext.focus();
        });
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        prm.add_endRequest(function () {
            var mytext = document.getElementById("TextBox1");
            mytext.focus();
        }); 
    </script>
    terça-feira, 18 de setembro de 2012 19:22
  • $ é do jQuery..

    E como voce não está utilizando da este erro.

    Quer postar seu código aqui?

    Mas só para explicar:

    Sempre que a página é carregada este evento do jquery ready() é chamado.

    Poste seu código que fica mais facil de te ajudar.



    terça-feira, 18 de setembro de 2012 22:21
  • William,

    Não utilizei JQuery nem JavaScript diretamente nessa tela que faz a leitura do código de barras. Apenas utilizei o Ajax nativo do Visual Studio 2010, no qual não precisei utilizar JQuery e JavaScript até o momento.

    Para colocar o foco no textbox, eu utilizo o código c#:

    textBox.Focus();

    Mas o problema é que quando coloco o foco no textbox pela aplicação, o Ajax não funciona, mas se eu colocar o foco manualmente com um clique no textBox, funciona normalmente.

    terça-feira, 18 de setembro de 2012 23:38
  • Consegui resolver o meu problema com a seguinte lógica.

    No evento Page_InitComplete coloco o foco no textbox da seguinte maneira:

    ScriptManager.SetFocus(txtLeitura);

    Mas o truque para que a página não fizesse o recarregamento novamente, foi fazer um interação na página com o Timer do Ajax com o evento Tick de 1 segundo e apenas desativo o Timer dentro desse evento.

    Isso faz com que exista uma interação com a página e depois disso o Ajax funciona corretamente.

    Obs: William, obrigado pela atenção.

    quarta-feira, 19 de setembro de 2012 11:11