Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Passar o focus no primefaces

Tenho uma tela com vários componentes, e todos eles existem um uma definição de maxlength.

    <p:inputMask id="iptTxtUO" maxlength="4" size="10" mask="9999" />
    <p:inputMask id="iptTxtFuncao" maxlength="1" size="10" mask="9"/>

Campos não estão passando entre si automaticamente no preenchimento, exemplo ao preencher o quarto caracter no campo iptTxtUO ele passa automaticamente para o campo iptTxtFuncao ?

2 respostas
solução!

Oi Guilherme, tudo bem?

o JSF não possui uma forma de fazer isso, quem pode realizar essa função para nós é o JavaScript.

primeiro é preciso colocar o atributo tabindex no inputMask:

<p:inputMask id="iptTxtUO" maxlength="4" size="10" mask="9999" tabindex="1"/>
    <p:inputMask id="iptTxtFuncao" maxlength="1" size="10" mask="9" tabindex="2"/>

e por fim adicionar a função JS para mudar o campo:

$('input[maxlength][tabindex]').on('keyup', function() {
    var $this = $(this);
    if ($this.val().length == $this.attr('maxlength')) {
        $("input[maxlength][tabindex='" + (parseInt($this.attr('tabindex')) + 1) + "']").focus();
    }
});

Obrigado Samir.

Só fiz alteração de componente para

<p:inputText id="iptTxtUO" onkeypress='return SomenteNumeros(event)' maxlength="4" tabindex="1">

<p:inputText id="iptTxtFuncao" onkeypress='return SomenteNumeros(event)' maxlength="1" tabindex="2">