Cuando se precisa de mostrar una tabla de formularios con listas desplegables y botones para editar, borrar, actualizar, etc…. ,al hacer clic en alguno de los elementos de un determinado formulario, se suele querer hacer una determinada tarea con los datos trasmitidos por POST o con los campos de ese determinado formulario vía alguna función javascript.

Normalmente, la tabla se rellena con unos formularios cuyo id es mas bien un número de orden que un nombre y por supuesto los nombres de los elementos del formulario quedan un poco ambiguos. El problema que resolví lo encontré en el diseño de mod_etapas.php

Si el formulario que llenaba la tabla con un bucle se llamaba datos parecía lógico cargar una variable algo así como:

nuevorecorrido=document.datos.cborecorrido.value;  donde cborecorrido es un cuadro combinado que aparece en el formulario.

Después de muchas vueltas llegué a la conclusion de que si tenia 7 forumularios los siete se llamaban datos. ¿Cómo saber cuál es el bueno?.

Con forms[indice] podía obtener la información el formulario que ocupase el orden dado por el índice de la matriz forms[].

nuevorecorrido=document.forms[indice].cborecorrido.value;

Esa parecía que debía ser la solución y había abierto cuatro formularios en la tabla pues con forms[0], forms[1]…. forms[3] eran los nombre a utilizar de los formularios y no “datos” como figuraba en name o id en el formulario.

En el mod_etapas.php, cuando dos o más etapas están diseñadas para la semana que comienza aparecen dos o más etapas que cada una de ellas tiene un cuadro de lista combinado que permite elegir la fecha de otro recorrido. La lista desplegable se llama cborecorrido en todas las etapas y para poder diferenciales había que utilizar una función como esta:

function cambia_recorrido(num_form)
{// ¿en qué cborecorrido de qué formulario recorrido se ha llamado a esta función?
// si el sistema  tuviera ya dos formularios abiertos para su utilidad interna y se mostraran dos recorridos tendríamos 4 formularios abiertos 0,1,2,3.
forms_abiertos=document.forms.length; // valdría 4
indice=forms_abiertos+num_form-1;
nuevorecorrido=document.forms[indice].cborecorrido.value;
/* txt=” “;
numforms=document.forms.length;
for (i=0;i<=numforms-1;i++)
{ txt=txt + document.forms[i].id+”n”;
}
//lo siguiente no valdría
//nuevorecorrido=document.getElementById(“cborecorrido”).value;
// cada formulario tiene un cborecorrido que todos se llaman igual que el primero que aparece
//alert (nuevorecorrido);
//alert(num_form);
//location.href=”mod_etapas.php?id_recorrido=” + nuevorecorrido; // envia id_recorrido.
*/
location.href=”recorridos-por-fechas?id_recorrido=” + nuevorecorrido; // envia id_recorrido.
} // finaliza la funcion html cambia recorrido

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *