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:
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;
}
}
É… não consegui fazer funcionar daquele jeito, então resolvi mudar o JS. Agora esse que eu coloquei, não é chamado a cada campo, mas sim verificado a cada ação de uma tecla.
Só que como não entendo muito de JS, e pesquisei muitooo e não encontrei nada, venho novamente pedir ajuda a vcs!
Tenho o seguinte código:
O que eu queria é que quando eu pressionar o enter, ele transforme num TAB. por enquanto o que ele faz é bloquear o enter.
Já tentei fazer assim, mas não funcionou:
function setaFoco(elemento) {
var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
if (keyCode == 13) {
var i;
for (i = 0; i < elemento.form.elements.length; i++)
if (elemento == elemento.form.elements[i])
break;
i = (i + 1) % elemento.form.elements.length;
elemento.form.elements[i].focus();
event.preventDefault();
return false;
}
return false;
}
*rrr
Eh q sempre dou uma comparada entre JSF e outros fremeworks, e futucando o GWT e Vaadin, acabei caindo aqui e
vi q poderia ser algo q serviria pra mim rs e achei interessante o qto te ajudaram rs.
function setaFoco(elemento) {
var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
if (keyCode == 13) {
var i;
for (i = 0; i < elemento.form.elements.length; i++)
if (elemento == elemento.form.elements[i])
break;
i = (i + 1) % elemento.form.elements.length;
elemento.form.elements[i].focus();
event.preventDefault();
return false;
}
return false;
}
na seguinte linha: for (i = 0; i < elemento.form.elements.length; i++) por causa do sinal de “menor que” entre o “i” o “elemento.form.elements.length”… a descrição do erro é: Fatal Error: The content of elements must consist of well-formed character data or markup.
Quando teclo ENTER o PrimeFaces automaticamente tentar enviar o formulário. ou seja não deixa passar para a próximo inputText.
Sabe como resolver isso?
function setaFoco(elemento) {
var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
if (keyCode == 13) {
var i;
for (i = 0; i < elemento.form.elements.length; i++)
if (elemento == elemento.form.elements[i])
break;
i = (i + 1) % elemento.form.elements.length;
elemento.form.elements[i].focus();
event.preventDefault();
return false;
}
return false;
}
na seguinte linha: for (i = 0; i < elemento.form.elements.length; i++) por causa do sinal de “menor que” entre o “i” o “elemento.form.elements.length”… a descrição do erro é: Fatal Error: The content of elements must consist of well-formed character data or markup.
alguém pode me ajudar?
Paulo[/quote]
Olá, conseguiu corrigir esse erro de sintaxe ? pra mim acontece a mesma coisa, valeu