Usuário com melhor resposta
Problema como foco no textbox com Ajax e página é recarregada

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.
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.
- Marcado como Resposta Guilherme Zuliani 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>;
-
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>- Editado Guilherme Zuliani terça-feira, 18 de setembro de 2012 19:35
-
$ é 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.
- Editado Willian Arsenio 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.
-
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.
- Marcado como Resposta Guilherme Zuliani quarta-feira, 19 de setembro de 2012 11:11