[quote=alissonvla]vc quer q execute uma regra no onblur e o foco volte para o mesmo componente, correto? se sim, entao vc sabe qual componente chamou o onblur
[/quote]
Obrigado pela atenção Alisson, consegui resolver de outra maneira.
Eu queria algo mais automático, e consegui fazendo uns testes aki… acho que ficou excelente…
O método que criei funciona assim.
Adiciono um EventListener ao document:
document.addEventListener("focus", getFocusedId, true);
Então criei este método “getFocusedId”, que grava numa variável do navegador o id do componente que recebeu o foco:
function getFocusedId() {
var obj = document.activeElement;
if (obj.id != '') {
localStorage.setItem('compFoco', obj.id);
}
}
Ou seja, toda vez que algum componente receber o foco, uma variável é setada com seu ID.
Em seguida, fiz uma função simples que envia pelo ID que esta na variável:
function setFocus() {
try {
document.getElementById(localStorage.getItem('compFoco')).focus();
} catch(err) {
}
}
E para disparar isto, utilizei um phaseListener do JSF 2… e RequestContext do Primefaces:
@Override
public void afterPhase(PhaseEvent arg0) {
RequestContext.getCurrentInstance().execute("setFocus()");
}
Ou seja… um EventListener no document que grava em “tempo real” numa variavel os componentes que recebem o foco… e outro método que manda o foco, disparado por um phaseListener…
Ou seja, nunca mais preciso me preocupar com foco na vida… rááá!!!
Vlw aeee… espero que isso ajude alguém…
Abraços