Retornar foco evento onblur onchange

975 views
Skip to first unread message

Diego Ferreira da Silva

unread,
Jan 6, 2010, 8:04:03 PM1/6/10
to jav...@googlegroups.com

Pessoal,

Estou tendo o seguinte problema, no evento de onChange ou onBlur, estou chamando uma funcao javascript para fazer uma validacao, porem quando tento retornar o foco para o campo, ele nao retorna, ele sempre passa o foco para o campo seguinte.
Se eu utilizar em outro evento, tipo onclick, ai funciona perfeitamente.

Segue abaixo um codigo ilustrativo:

function setaFocoCampo(obj){
    if (confirm('Setar foco')) {
        alert('confirmou');               
        jQuery(obj).focus();
        return false;
    } else {
        alert('nao confirmou');       
        return false;
    }
}
</script>

<input id="input1" type="text" onblur="setaFocoCampo(this);"> Aqui nao funcionar, tanto no evento onblur ou onchange
<input id="input2" type="text">
<input id="botao" type="button" value="seta foco" onclick="setaFocoCampo(jQuery('[id$=input2]'));"> Aqui já funciona


Alguem pode me falar porque isso acontece?

Obrigado

att
Diego


Handerson Frota

unread,
Jan 6, 2010, 8:32:57 PM1/6/10
to jav...@googlegroups.com
Primeiro, o evento onblur será disparado quando você sair do campo. O evento onchange será disparado quando você sair do campo, MAS só se você tiver alterado algo no campo(digitado etc).

Pelo que entendi você está fazendo o seguinte...

Campo 1 --> dispara a função --> manda voltar para o campo 1 --> que dispara novamente a função ---> volta para o início.

Recursividade ai.

Explica ai o que você quer realmente fazer, para que possamos te ajudar ou te dar outra estratégia sei la.

Abraços

2010/1/6 Diego Ferreira da Silva <diegos...@gmail.com>
--
You received this message because you are subscribed to the Google Groups "java.ce" group.
To post to this group, send email to jav...@googlegroups.com.
To unsubscribe from this group, send email to javace+un...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/javace?hl=en.




--
Handerson Frota
CEO Triadworks - www.triadworks.com.br
www.handersonfrota.com.br
Coordenador da JavaCE - www.javace.org

Diego Ferreira da Silva

unread,
Jan 6, 2010, 8:47:48 PM1/6/10
to jav...@googlegroups.com
Basicamente o que eu quero fazer é que no onblur e onchange a chamada do jQuery(mesmoobjeto).focus(); funcione.

Obrigado.

att
diego

2010/1/6 Handerson Frota <hande...@gmail.com>



--
Diego Ferreira da Silva
Bacharel em Sistemas de Informação - Uniube(cursando)
Sun Certified Java Programmer 6
34-8403-6517
http://www.diegosilva.com.br

Handerson Frota

unread,
Jan 7, 2010, 6:52:05 AM1/7/10
to jav...@googlegroups.com
mas está funcionando aqui, o problema e que pode causar recursividade.

Por isso pedi para você explicar melhor o que você quer realmente fazer.

O cara vai digitar algo e quando ele disparar o blur ou change, ele irá validar na funcao, se estiver errado ele volta para o campo onde ele digitou ?
é isso ?

Diego Ferreira da Silva

unread,
Jan 7, 2010, 7:17:48 AM1/7/10
to jav...@googlegroups.com
Sim é isso,

tipo o codigo abaixo, no meu aqui esse codigo nao funciona, só funciona no IE:


function setaFocoCampo(obj){
    if (confirm('Setar foco')) {
        alert('confirmou');               
        jQuery(obj).focus();
        return false;
    } else {
        alert('nao confirmou');       
        return false;
    }
}
</script>

<input id="input1" type="text" onblur="setaFocoCampo(this);"> Aqui nao funcionar, tanto no evento onblur ou onchange

2010/1/7 Handerson Frota <hande...@gmail.com>

Diego Ferreira da Silva

unread,
Jan 7, 2010, 8:51:27 AM1/7/10
to jav...@googlegroups.com
Tentei fazer assim

function setaFocoCampo(obj, evt){
evt.preventDefault();

    if (confirm('Setar foco')) {
        alert('confirmou');               
        jQuery(obj).focus();
        return false;
    } else {
        alert('nao confirmou');       
        return false;
    }
}
</script>

<input id="input1" type="text" onblur="setaFocoCampo(this);"> Aqui nao funcionar, tanto no evento onblur ou onchange

2010/1/7 Diego Ferreira da Silva <diegos...@gmail.com>

Diego Ferreira da Silva

unread,
Jan 7, 2010, 8:52:49 AM1/7/10
to jav...@googlegroups.com
Desculpa, mensagem anterior foi sem querer antes de eu terminar,

Bom tentei fazer assim utilizando o evt.preventDefault(); mas nao deu certo tambem.


function setaFocoCampo(obj, evt){
evt.preventDefault();
    if (confirm('Setar foco')) {
        alert('confirmou');               
        jQuery(obj).focus();
        return false;
    } else {
        alert('nao confirmou');       
        return false;
    }
}
</script>

<input id="input1" type="text" onblur="setaFocoCampo(this, event);"> Aqui nao funcionar, tanto no evento onblur ou onchange

Handerson Frota

unread,
Jan 7, 2010, 9:30:20 AM1/7/10
to jav...@googlegroups.com
Outra coisa que observei é a sua chamada do jquery, acho que está errada.

quando vc faz

onblur="setaFocoCampo(this);"

esse this é um HTMLInputElement 

com o dwr vc consegue ver o objeto....
dwr.util.toDescriptiveString(this, 2);

mas com o firebug vc pode debugar e ver tbm...mas é mais ou menos assim esse objeto....

<input id="teste" type="text" style="width: 570px;" value="" onblur="alert(dwr.util.toDescriptiveString(this, 2));" />

HTMLInputElement {
  scrollWidth:572, 
  clientLeft:1, 
  clientHeight:18, 
  clientWidth:570, 
  clientTop:1, 
  contentEditable:"inherit", 
  offsetLeft:22, 
  offsetTop:264, 
  offsetHeight:20, 
  offsetWidth:572, 
  type:"text", 
  form:HTMLFormElement {org.apache.struts.taglib.ht...:HTMLInputElement, id:HTMLInputElement, acaoFiscal.id:HTMLInputElement, dataInclusao:HTMLInputElement, cfop.codigo:HTMLInputElement, ...}, 
  id:"teste", 
  tagName:"INPUT", 
  childNodes:[], 
  nodeName:"INPUT", 
  nodeType:1, 
  localName:"INPUT", 
  maxLength:-1, 
  controllers:XULControllers {QueryInterface:function, getControllerForCommand:function, insertControllerAt:function, removeControllerAt:function, getControllerAt:function, ...}, 
  scrollHeight:20
}

veja um exemplo:

<input id="inputTeste" type="text" style="width: 570px;" value="" onblur="testFocus(this);" />
<script>
function testFocus(obj){
alert("ok");
alert(dwr.util.toDescriptiveString(obj, 2));
alert("Ex1: " + jQuery(obj).val());
alert("Ex2: " + jQuery("#"+obj.id).val());
jQuery("#"+obj.id).focus();
}

</script>


nao sei realmente pq nao esta funcionando com vc.


2010/1/7 Handerson Frota <hande...@gmail.com>

Diego Ferreira da Silva

unread,
Jan 8, 2010, 8:45:46 PM1/8/10
to jav...@googlegroups.com
Tosco, mas a unica solucao que encontrei para voltar o foco para o campo nos eventos onchange e onblur foi criando as funcoes abaixo:

Desta forma ele coloca o foco no campo seguinte que é o evento padrao e logo em seguida ele volta o foco para o campo passado como parametro, mas é imperceptivel para o usuário.

abraço a todos e obrigado.

function colocaFoco(obj){
    setTimeout("setaFoco('"+jQuery(obj).attr("id")+"')",0);   
}
function setaFoco(id){
    alert(id);
    jQuery("[id$="+id+"]").focus();
}

2010/1/7 Handerson Frota <hande...@gmail.com>
Reply all
Reply to author
Forward
0 new messages