Foros del Web » Programando para Internet » Javascript »

Formulario array indice desde el que llamo

Estas en el tema de Formulario array indice desde el que llamo en el foro de Javascript en Foros del Web. Buenas tardes: Página web con tres formularios. documents.forms.length = 3 form[0] name = primero. Sólo muestra un registro. form[1] name = segundo. Muestra todos los ...
  #1 (permalink)  
Antiguo 25/02/2015, 10:26
 
Fecha de Ingreso: noviembre-2005
Mensajes: 146
Antigüedad: 18 años, 5 meses
Puntos: 1
Formulario array indice desde el que llamo

Buenas tardes:
Página web con tres formularios.
documents.forms.length = 3
form[0] name = primero. Sólo muestra un registro.
form[1] name = segundo. Muestra todos los registros con campo vinculado al primero
form[2] name = tercero. Formulario para agregar registro a la tabla del formulario "segundo".
Agrego un registro:
documents.forms.length = 4
form[0] name = "primero". Sólo muestra un registro.
form[1] name = "segundo". Muestra el registro con campo vinculado al formulario "primero".
form[2] name = "segundo". Muestra el nuevo registro con campo vinculado al "primero"
form[3] name = "tercero". Formulario para agregar registro a la tabla del formulario "segundo".

El resultado es que ahora tengo en la página 4 formularios. Dos de ellos con el mismo nombre.
Puedo filtrar el numero de formularios con los que voy a trabajar usando el nombre del formulario en el array:
documents.forms['segundo'].length=2.
El problema es que cuando llamo a una función para modificar valores del registro de cualquiera de los formularios denominados "segundo" , los cambios se producen en el primero de la lista. Es decir:
Suponiendo que haya aplicado documents.forms['segundo'].length=2 y y tenga por lo tanto :
documents.forms['solicitudes'].[0]
documents.forms['solicitudes'].[1]
Llamo a la función desde documents.forms['solicitudes'].[1], el cambio se produce en documents.forms['solicitudes'].[0].
Todo con javascript y por tanto en cliente. No llega a servidor. El cambio en servidor se ejecuta posteriormente con php.
Hay alguna función que indique desde que formulario estoy haciendo la llamada, para así indicar en que formulario tiene que hacerse los cambios que quiero.
Gracias.
  #2 (permalink)  
Antiguo 25/02/2015, 14:12
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Formulario array indice desde el que llamo

Si tomas a los formularios por sus nombres y hay más de uno con el mismo nombre, toma a dicho grupo e itéralo con un bucle, de esta manera, en cada iteración irías aplicando los cambios para que todos los formularios con dicho nombre se vean afectados.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 25/02/2015, 15:10
 
Fecha de Ingreso: noviembre-2005
Mensajes: 146
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Formulario array indice desde el que llamo

Hola Alexis88:
Gracias de nuevo por tu atención.
Esto es el siguiente eslabón del post que cerré ayer.
Quería saber si había alguna manera a través de DOM de saber que posición ocupa en el array, el formulario con el que estoy interactuando .
La salida que he encontrado para por un bucle en el que en vez de actualizar todos los formularios que hay en la página con el mismo nombre, sólo se actualiza el que cumple una condición, que el usuario tiene que introducir a través de un prompt.
Pero creo que es más sencillo si, como tu dices, recorro todos los formularios con el bucle de manera que en realidad sólo se producirá cambios en el que yo haya realizado el cambio a traves del campo indicado y al que posteriormente se le aplicará un submit que actualizará los datos en la base de datos.
No cierro este tema porque estoy teniendo algunos problemas con el código, puede que por llevar exceso de horas sentado delante del monitor.
Comentaré como ha ido antes de cerrar el post.
Gracias de nuevo.
  #4 (permalink)  
Antiguo 25/02/2015, 16:24
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Formulario array indice desde el que llamo

En ese caso, es más sencillo. El usuario podría ingresar el número de formulario con dicho nombre, entonces, solo te queda hacer esto:

Código Javascript:
Ver original
  1. var numero = prompt("Ingrese el número de formulario:"),
  2.     formulario = document.querySelectorAll("[name=segundo]")[numero - 1];

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 26/02/2015, 16:27
 
Fecha de Ingreso: noviembre-2005
Mensajes: 146
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Formulario array indice desde el que llamo

Hola:
Solucionado el problema que genero este post.
Seguí la recomendación primera de Alexis88, recorrer los formularios actualizándolos, pero incluí un parametro en el Select de manera que el primer elemento del arrary es un número sí el select ha sido modificado. Así en el bucle si el parametro no está, lo obvia y pasa al siguiente.
Os dejo el código por si sirve de orientación a alguien. Es la función a la que llamo desde el formulario. En este caso hay un formulario de actualización y otro de adición de registro. Ambos llaman a la misma función y esta actua de una u otra manera.
De nuevo mi agradecimiento a Alexis88. Aunque seguire solicitando ayuda. Esto aún no ha acabado.
Código Javascript:
Ver original
  1. function seleccionar_servicios(clicked_id)
  2.     {
  3.             //Obtenemos el id desde el que se hace la llamada al eventno
  4.             var select = document.getElementById(clicked_id); //El <select>
  5.             valor = select.value; //El valor de la opción seleccionada
  6.             //Establezo dos posibilidades de uso: .innerText e .textContent ya que firefox no funciona con .innertText.
  7.             contenido1     = select[select.selectedIndex].innerText;
  8.             contenido2     = select[select.selectedIndex].textContent;
  9.             //Esta condición es por si al usar firefox .innerText no es intrepretado por Firefox y devuelve undefined.
  10.             if(contenido1 != undefined){var_objeto = contenido1}else{var_objeto = contenido2};
  11.             //Condicionamos la ejecución del código en función de que el clicked_id sea "S" que supone modificar registro que existe
  12.             // o sea "A" que es agregar un resgistro nuevo.
  13.             if(clicked_id.substring(0, 1) == 'S')
  14.                 {
  15.                         //Trabajamos con DOM para saber cuantos formularios hay. El primero y el último no se afectan por este código.
  16.                         //Sólo para los registros que son del formulario "solicitudes".
  17.                         //Número de formularios que hay.
  18.                         var num_forms = document.forms.length;
  19.                         //Descartamos el primero y el último.
  20.                         for(i=1; i<num_forms -1 ; i++)
  21.                         {
  22.                             //Seleccionamos el select que contiene los servicios.
  23.                             var select = document.forms[i].elements[2];
  24.                             //Obtenemos el texto que hay en el registro. Dos funciones para diferentes explorer.
  25.                             contenido1 = select[select.selectedIndex].innerText;
  26.                             contenido2 = select[select.selectedIndex].textContent;
  27.                             if(contenido1 != undefined){var_objeto = contenido1}else{var_objeto = contenido2};
  28.                             //Generamos el array palabras, que distingue por la "," el contenido procedente de la option value.
  29.                             var palabras = var_objeto.split(",")
  30.                             //Distinguimos el formulario sobre el que actuar a través de la existencia de un número en el primer
  31.                             //elemento del array palabras.
  32.                             if(!isNaN(palabras[1]))
  33.                             {
  34.                                 //Verificamos si el servicio es para grupo o inidividual y asignamos valor.
  35.                                 if(palabras[3] === '2')
  36.                                     {
  37.                                     var_usuario = 1;
  38.                                     document.forms[i].elements[4].value  = var_usuario;
  39.                                     }
  40.                                 else
  41.                                     {
  42.                                     //Asignamos a la variable la duración el numero de usuarios del servicio
  43.                                     //Valor recogido en el formulario principal.
  44.                                     var_usuario = document.getElementById(4).value;
  45.                                     document.forms[i].elements[4].value = var_usuario ;
  46.                                     }
  47.                                 //Asignamos a la variable la duración del evento(días)
  48.                                 //Valor recogido en el formulario principal.   
  49.                                 var_tiempo  = document.getElementById(7).value;
  50.  
  51.                                 document.forms[i].elements[2].value  = palabras[2];
  52.                                 document.forms[i].elements[3].value  = var_tiempo;
  53.                                 document.forms[i].elements[8].value  = palabras[4];
  54.                                 document.forms[i].elements[9].value  = palabras[5];
  55.                                 document.forms[i].elements[10].value = palabras[4]* var_usuario * var_tiempo;
  56.                                 document.forms[i].elements[11].value = palabras[5]* var_usuario * var_tiempo;
  57.                                 document.forms[i].elements[12].value = palabras[6];
  58.                             }
  59.                            
  60.                         }
  61.  
  62.                 }
  63.             //Este es para la opción de agregar registro.
  64.             else if(clicked_id.substring(0, 1) == 'A')
  65.                 {
  66.                     var_prefijo = "A";
  67.                     var_usuario = "A05";
  68.                     var_tiempo  = "A04";                   
  69.  
  70.                     //Convierto en array con .split() el resultado obtenido para la variable objeto.
  71.                     var palabras = var_objeto.split(",");
  72.                                 //Verificamos si el servicio es para grupo o inidividual y asignamos valor.
  73.                                 if(palabras[2] === '2')
  74.                                     {
  75.                                     var_usuario = 1;
  76.                                     document.getElementById(var_prefijo + "05").value = var_usuario;
  77.                                     }
  78.                                 else
  79.                                     {
  80.                                     //Asignamos a la variable la duración el numero de usuarios del servicio
  81.                                     //Valor recogido en el formulario principal.                                       
  82.                                     var_usuario = document.getElementById(4).value;
  83.                                     document.getElementById(var_prefijo + "05").value = var_usuario ;
  84.                                     }
  85.                                 //Asignamos a la variable la duración del evento(días)
  86.                                 //Valor recogido en el formulario principal
  87.                                 var_tiempo  = document.getElementById(7).value;
  88.  
  89.                     document.getElementById(var_prefijo + "03").value = palabras[1];
  90.                     document.getElementById(var_prefijo + "04").value = var_tiempo;
  91.                     document.getElementById(var_prefijo + "09").value = palabras[3];
  92.                     document.getElementById(var_prefijo + "10").value = palabras[4];
  93.                     document.getElementById(var_prefijo + "11").value = palabras[3] * var_usuario * var_tiempo;
  94.                     document.getElementById(var_prefijo + "12").value = palabras[4] * var_usuario * var_tiempo;
  95.                     document.getElementById(var_prefijo + "13").value = palabras[5];   
  96.                 }
  97.     }

Etiquetas: formulario, indice, php, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:50.