Olá pessoal!
Eu tenho um h:form com vários h:inputText, e com uns p:commandButton [primeFaces] dentro dele,
e tenho um código javaScript que seta o focus do h:inputText porém, quando eu pressiono a tecla enter, ele executa o primeiro p:commandButton
caso eu tire todos os p:commandButton de dentro do h:form, ele funciona… mas eu preciso desses p:commandButton nesse h:form.
Obs: já tentei trocar os p:commandButton por h:commandButton e acontece a mesma coisa!
Segue uma parte do código:
<h:form id="formDadosCliente" >
<p:panel>
<p:commandButton image="pesquisar" title="Buscar Clientes" onclick="dlgTabelaClientes.show()" update="formTabelaClientes" immediate="true" />
<p:commandButton image="salvar" title="Salvar" actionListener="#{clienteBean.gravar}" update="growl,formDadosCliente,formTabelaClientes"/>
<p:commandButton image="desabilitar" title="Desabilitar" onclick="dlgDesabilitarCliente.show();" rendered="#{clienteBean.cliente.codigo > 0}" immediate="true" />
</p:panel>
<p:tabView id="tabViewCliente">
<p:tab title="Dados Cliente" id="tabDadosCliente">
<h:panelGrid columns="5" columnClasses="coluna5,coluna40,coluna30,coluna10,coluna15" cellpadding="3" width="100%">
<h:outputText value="Codigo" />
<h:outputText value="Nome do cliente/Razão Social" />
<h:outputText value="Fantasia/Apelido" />
<h:outputText value="Pessoa" />
<h:outputText value="CPF/CNPJ" />
<h:inputText id="codigo" value="#{clienteBean.cliente.codigo}" disabled="true" style="width: 100%" />
<h:inputText id="nome" value="#{clienteBean.cliente.nome}" style="width: 100%" required="true" requiredMessage="Informe o nome" onblur="upperCase(this)" onkeydown="setaFoco(this, event);"/>
<h:inputText id="fantasia" value="#{clienteBean.cliente.fantasia}" style="width: 100%" onblur="upperCase(this)" onkeydown="setaFoco(this, event);" />
<h:selectOneMenu id="tipoPessoa" value="#{clienteBean.cliente.tipoPessoa}" valueChangeListener="#{clienteBean.trocaMascara}" style="width: 100%" onkeydown="setaFoco(this, event);" >
<f:selectItems value="#{listasUtil.tipoPessoa}" />
<f:ajax event="change" render="cpfCnpj" />
</h:selectOneMenu>
<p:outputPanel id="cpfCnpj" >
<p:inputMask value="#{clienteBean.cliente.cpfCnpj}" mask="#{clienteBean.mascaraCpfCnpj}" style="width: 100%" required="true" requiredMessage="Informe o CPF/CNPJ" onkeydown="setaFoco(this, event);" />
</p:outputPanel>
</h:panelGrid>
</p:tab>
</p:tabView>
</h:form>
Coloquei só a base do código, na realidade tem bem mais h:inputText dentro desse form, mas eu tirei para ficar mais claro.
Segue a função em JS, que eu encontrei na net:
function setaFoco(elemento, event) {
var ind = 0;
var isNN = (navigator.appName.indexOf("Netscape")!=-1);
var keyCode = (isNN) ? event.which : event.keyCode;
var nKeyCode = event.keyCode;
if(keyCode == 13){
if (!isNN) {
window.event.keyCode = 0;
} // evitar o beep
ind = getIndex(elemento);
if (elemento.form[ind].type == 'textarea') {
return;
}
ind++;
elemento.form[ind].focus();
if (elemento.form[ind].type == 'text') {
elemento.form[ind].select();
}
}
function getIndex(elemento) {
var index = -1, i = 0, found = false;
while (i < elemento.form.length && index == -1)
if (elemento.form[i] == elemento) {
index = i;
if (i < (elemento.form.length -1)) {
if (elemento.form[i+1].type == 'hidden') {
index++;
}
if (elemento.form[i+1].type == 'button' && elemento.form[i+1].id == 'tabstopfalse') {
index++;
}
}
}
else
i++;
return index;
}
}

