Ver Mensaje Individual
  #4 (permalink)  
Antiguo 02/04/2009, 15:10
Avatar de matiasariel
matiasariel
 
Fecha de Ingreso: abril-2009
Mensajes: 8
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Tabulación entre fieldsets

Hola, aver, el tema es el siguiente, para resumir: mi problema era que tenia un formulario dividido en fieldsets y que queria tabular con la tecla enter. Para eso utilicé una función javascript (que encontré por ahí en la web y que figura en mi primer post), y que funcionaba (pasaba de campo en campo con enter), pero solo hasta llegar al final de un fieldset, luego no saltaba al primer campo del fieldset siguiente.

Sinceramente recién estoy empezando con programación web, y no tengo mucha
idea de javascript. Pero pude hacer lo siguiente para solucionarlo:

Pongo un ejemplo de una página simple con un formulario con dos fieldset primero sin ninguna funcion:

Código:
<HTML>
<HEAD>
   <title>Tabular con enter entre fieldsets</title>
</HEAD>
<BODY>

<form action="" id="formulario" method="GET">

<fieldset id="formulario"><legend>Formulario</legend>
  <span><label for="nroform">Nro. Formulario <br  /><input  type="text" id="nroform" /></label></span><br />
  <span><label for="efector">Efector <br  /><input  type="text" id="efector"  /></label></span>
</fieldset>
 
<fieldset id="fechacarga"><legend>Fecha (dd-mm-aaaa)</legend>
          <span><input type="text" id="dia_car" size="2" /></span>
          <span><input type="text" id="mes_car" size="2" /></span>
          <span><input type="text" id="anio_car" size="2" /></span>
        </fieldset> 
 </fieldset>
</form>

</BODY>
</HTML>
Ahora la misma página con la función javascript que permite tabular con enter entre fieldsets (marco en rojo lo que agregué):

Código:
<HTML>
<HEAD>
   <title>Tabular con enter entre fieldsets</title>
</HEAD>
<script LANGUAGE="JavaScript">
<!--  
  var elementos = new Array ("nroform","efector","dia_car","mes_car","anio_car");
 
  function tabular (evento,objeto, indice, elementos)
  {tecla=(document.all) ? evento.keyCode : evento.which;
   if(tecla!=13) return;
   document.getElementById(elementos[indice]).focus();
   }
  
//-->
</script>

<BODY>

<form action="" id="formulario" method="GET">

<fieldset id="formulario"><legend>Formulario</legend>
  <span><label for="nroform">Nro. Formulario <br  /><input  type="text" id="nroform" onkeypress="return tabular(event,this,1,elementos)"/></label></span><br />
  <span><label for="efector">Efector <br  /><input  type="text" id="efector"  onkeypress="return tabular(event,this,2,elementos)"/></label></span>
</fieldset>
 
<fieldset id="fechacarga"><legend>Fecha (dd-mm-aaaa)</legend>
          <span><input type="text" id="dia_car" size="2" onkeypress="return tabular(event,this,3,elementos)"/></span>
          <span><input type="text" id="mes_car" size="2" onkeypress="return tabular(event,this,4,elementos)"/></span>
          <span><input type="text" id="anio_car" size="2" onkeypress="return tabular(event,this,5,elementos)"/></span>
        </fieldset> 
 </fieldset>
</form>

</BODY>
</HTML>
Para finalizar explico lo que hice:

Cree un array que contiene los ids de los elementos del formulario, en el orden en el que quería que vaya cambiando el foco al apretar enter.
Luego cree una función en javascript que recibe como parametros un indice (que determina la posición del "id" del elemento del arreglo, que va a tomar el siguiente foco (la función también recibe el arreglo creado anteriormente).
La función primero determina si la tecla presionada es enter, y luego, si lo es, enfoca al elemento cuyo id esta en la posición del arreglo que entra en la variable "indice". Eso se hace en la línea

Código:
document.getElementById(elementos[indice]).focus();
Y para finalizar a cada elemento del formulario le agregue el evento onkeypress llamando a la funcion. Y mandando como variable "indice" una constante que determina el valor del siguiente elemento a ser enfocado.

Seguramente hay alguna forma mas eficiente de hacerlo, y agradecería cualquier corrección. También aclaro que solo lo probé en Firefox.

Saludos
Matías