Atribuição dinâmica de evento
Meu problema é mais especificamente no navegador FireFox (ele sempre implica
comigo :P)
Preciso remover a função do botão enter (KeyCode = 13) para o Tab (KeyCode =
9).
Tenho a seguinte solução que funciona perfeitamente no IE:
Form html
------------
<form id="FormDoXola">
Box 1:<input type="text" name="box1" id="box1"><br>
Box 2:<input type="text" name="box2" id="box2"><br>
Box 3:<input type="text" name="box3" id="box3"><br>
Box 4:<input type="text" name="box4" id="box4"><br>
<input type="submit" name="done" value="Submit">
</form>
Ao carregar o body de meu documento eu faço uma chamada à função que vai
percorrer todos os componentes do form e adicionar à função:
<BODY onload="varreElementos(document.getElementById('FormDoXola'));">
O Código JavaScrpt:
function varreElementos(el)
{
if(el.hasChildNodes())
{
for(i=0;i<el.childNodes.length;i++)
{
if(el.childNodes.hasChildNodes())
{
*varreElementos(el.childNodes**);*
}
else
{
*setaFuncaoElementos(el.childNodes**);*
}
}
}
else
{
setaFuncaoElementos(el);
}
}
function setaFuncaoElementos(el)
{
if(el.nodeType == 1 && el.id != '')
{
if (window.addEventListener) // FireFox
{
el.addEventListener('onkeypress', handleEnter, true);
}
else
if (window.attachEvent) // IE
{
el.attachEvent('onkeypress', handleEnter);
}
}
}
function handleEnter(e)
{
var keyCode = event.keyCode ? event.keyCode : event.which ? event.which
: event.charCode;
var field = event.srcElement;
if (keyCode == 13)
{
var i;
for (i = 0; i < field.form.elements.length; i++)
{
*if (field.id == field.form.elements**.id)*
break;
}
i = (i + 1) % field.form.elements.length;
*field.form.elements**.focus();*
return false;
}
else
return true;
}
Como já disse no IE está funcionando corretamente. Já pesquisei se poderia
ser a forma de atribuição do evento, mas esta não ocorre erro, o que ocorre é
que simplesmente ao ocorrer o 'onkeypress' no FF nenhum evento é disparado,
diferente do IE que dispara certo!
Obrigado!!
[]'s
Discussão (2)
Carregando comentários...