Enter por tab - JSF + Primefaces

13 respostas
V

Galera já pesquisei mas não achei nenhum script que funciona com os componentes do primefaces.
Alguém aí já conseguiu fazer para quando eu apertar enter ele execute a função do tab indo para outro campo com os componentes do prime ?
abraços

13 Respostas

J

Clipper na Web não por favor! Mas respondendo a sua pergunta, no GUJ tem muita coisa já sobre o assunto.

V

Já procurei pra baralho e nada rs Clipper na web tsc ? acho que você não é muito de pensar em usuário né ?

J

No link que passei tem pelo menos 5 tópicos sobre o assunto, pode valer a tentativa. Sobre o usuário sempre que posso tento convencer do que o mundo é hoje, o que ao redor funciona de um jeito e não querer de outro.

F

Acho que dá pra fazer com jQuery.

1- crie um listener no keypress da tecla enter. A função começa com um preventDefault() para evitar a submissão do form
2- dentro desse listener chame a função trigger do jQuery, passando o evento keypress e a tecla que você quer simular (no caso tab)

V

O que você botou um link do google, que por acaso eu sei usar, eu já tinha procurado e nenhum funcionou quando eu venho aqui pro guj é por que não encontrei em lugar nenhum, se quiser não quiser ajudar blz, mas também não atrapalha.

Felipe, obrigado pela resposta, você poderia exemplificar ?

eu achei esse códido até, mas não funcionou :/

textboxes = $("input, select, textarea");
 
if ($.browser.mozilla) {
	$(textboxes).keypress (checkForEnter);
} else {
	$(textboxes).keydown (checkForEnter);
}
 
function checkForEnter (event) {
	console.log(this);
	if (event.keyCode == 13) {
		currentBoxNumber = textboxes.index(this);
		
		if (textboxes[currentBoxNumber + 1] != null) {
			nextBox = textboxes[currentBoxNumber + 1]
			nextBox.focus();
            event.preventDefault();
            return false;
		}	 
	}
}
F

Olha só, achei esse exemplo aqui. É diferente do que eu estava pensando, pois ele não simula a digitação do tab, e sim pega o próximo elemento do form pelo indíce dele no set do jQuery.

Aparentemente funciona, mas não testei.

$('input').keydown( function(e) {
        var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
        if(key == 13) {
            e.preventDefault();
            var inputs = $(this).closest('form').find(':input:visible');
            inputs.eq( inputs.index(this)+ 1 ).focus();
        }
    });

fonte: http://stackoverflow.com/questions/2335553/jquery-how-to-catch-enter-key-and-change-event-to-tab

J

Valeu, boa sorte.

V

felipe_gdr e no xhtml como eu boto pra funcionar no <p:inputText /> ?

F

Não precisa por nada.

O seletor do jQuery ‘input’ já filtra todos os elementos que são input e aplica esse listener.

V

mas pra chamar ele dentro do meu xhtml como faço ?

F
<h:outputScript target="body">
$('input').keydown( function(e) {  
       var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;  
       if(key == 13) {  
           e.preventDefault();  
           var inputs = $(this).closest('form').find(':input:visible');  
           inputs.eq( inputs.index(this)+ 1 ).focus();  
       }  
   }); 
</h:outputscript>

é só isso mesmo.

V

pronto, vou tentar mais tarde. Depois posto a resposta, obrigadão :]

D

Você ja tentou da seguinte forma ? :

<h:form id="form">
            <p:panelGrid columns="2">
                <f:facet name="header">
                    <h:outputText value="Formulario"/>
                </f:facet>
                <h:outputText value="Nome :"/>
                <p:inputText id="nome" onkeypress="if(event.keyCode===13){document.getElementById('form:telefone').focus();return false;}"/>
                 <h:outputText value="Telefone :"/>
            <p:inputText id="telefone"/>
            </p:panelGrid>
        </h:form>
Criado 24 de abril de 2013
Ultima resposta 25 de abr. de 2013
Respostas 13
Participantes 4