Foros del Web » Programando para Internet » Javascript »

No puedo acceder a los campos de un formulario

Estas en el tema de No puedo acceder a los campos de un formulario en el foro de Javascript en Foros del Web. Hola, estoy haciendo una pequeña aplicación en ajax para administrar una base de datos. Tengo una función que genera un nuevo formulario para insertar un ...
  #1 (permalink)  
Antiguo 04/03/2009, 12:59
 
Fecha de Ingreso: marzo-2009
Mensajes: 16
Antigüedad: 15 años, 1 mes
Puntos: 0
No puedo acceder a los campos de un formulario

Hola, estoy haciendo una pequeña aplicación en ajax para administrar una base de datos. Tengo una función que genera un nuevo formulario para insertar un usuario (sólo pongo un campo para simplificar):

Código:
//Crea un formulario nuevo para insertar un usuario
function nuevo_usuario() {
        var informacion=document.getElementById("informacion");
        informacion.innerHTML="<h3>Datos de usuario:</h3><br>";
        informacion.innerHTML=informacion.innerHTML+"<form name=\"datos\">";
        informacion.innerHTML=informacion.innerHTML+"<input type=\"text\" name=\"nombre\">";
        informacion.innerHTML=informacion.innerHTML+"<input type=\"submit\" onclick=\"validar()\" value=\"Insertar\" name=\"Insertar\">";
        informacion.innerHTML=informacion.innerHTML+"</form>";
}
El botón de envío llama a la función de validación (también simplificada para que se vea el problema):

Código:
//Valida los datos del formulario
function validar() {
        alert("Formulario:"+document.datos);
        alert("Nombre:"+document.datos.nombre);
}
En el primer alert de validar me muestra una salida que indica que existe el objeto datos, pero en el segundo alert me sale en el mensaje "Undefined reference", como si el objeto nombre (el cuadro de texto) no existiese. De hecho si cargo la página en Internet Explorer me sale un error javascript diciendo que el objeto es nulo.

En otras palabras, puedo acceder al formulario pero no a los campos. Es como si estuviese vacío, cuál es el problema?
  #2 (permalink)  
Antiguo 04/03/2009, 14:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: No puedo acceder a los campos de un formulario

Hola druha,

Lo mejor es manejar el DOM de forma adecuada, ya que tienes el objeto de tu formulario para leer un item es mejor usar form.elements['nombre_del_campo'].

Saludos

Tema trasladado desde AJAX.
  #3 (permalink)  
Antiguo 05/03/2009, 06:42
 
Fecha de Ingreso: marzo-2009
Mensajes: 16
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: No puedo acceder a los campos de un formulario

Hola GatorV, probé de esa forma y tampoco me funcionó. Haciendo pruebas me di cuenta de que el problema es al concatenar sucesivamente sobre innerHTML, por algún motivo no se almacena bien la estructura del formulario. La solución es concatenar sobre una variable temporal y luego asignar a innerHTML:

Código:
//Crea un formulario nuevo para insertar un usuario
function nuevo_usuario() {
        var informacion=document.getElementById("informacion");
        campos="<h3>Datos de usuario:</h3><br>";
        campos+="<form name=\"datos\">";
        campos+="<input type=\"text\" name=\"nombre\">";
        campos+="<input type=\"submit\" onclick=\"validar()\" value=\"Insertar\" name=\"Insertar\">";
        campos+="</form>";
        informacion.innerHTML=campos;
}
No entiendo muy bien por qué es así, si es un bug del lenguaje o si estoy usando mal esa propiedad, pero el caso es que de esta forma funciona. Aquí queda por si alguien se ve en las mismas.

Bueno, un saludo y gracias por la ayuda.
  #4 (permalink)  
Antiguo 05/03/2009, 20:55
Avatar de sweetlydark  
Fecha de Ingreso: septiembre-2008
Mensajes: 391
Antigüedad: 15 años, 7 meses
Puntos: 10
Respuesta: No puedo acceder a los campos de un formulario

No es un bug esta haciendo su trabajo bien, solo que no conoces como trabaja y eso añadido a unas practicas... eh... raro te da estos errores.

El problema en si es este linea:

Código:
informacion.innerHTML=informacion.innerHTML+"<form name=\"datos\">";
donde le indicas a innnerHTML que debe añadir un nodo <form> como hijo de información y pues lo añade;

Código:
<div id="informacion"><form name="datos"></form></div>
Luego después de </form> añade los otros nodos que le indica.

No sugiero usar un método (como innerHTML) en un concatenación ya que este va alentar tu código. Es mas deberías, si es posible, evitar las concatenaciones excesivas por la misma razón, aunque aveces es negable el tiempo de ejecutacion, sigue siendo una mala practica.
__________________
Por fin vuelvo a tener internet!
http://www.anidandoetiquetas.com/
  #5 (permalink)  
Antiguo 06/03/2009, 05:27
 
Fecha de Ingreso: marzo-2009
Mensajes: 16
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: No puedo acceder a los campos de un formulario

sweetlydark, posiblemente sea una solución cutre pero no soy un experto en javascript y es la más simple e inmediata que he encontrado. Muchas veces tenemos que usar lenguajes que no dominamos y nos vemos obligados a usar las herramientas que conocemos siempre que nos permitan llegar a nuestro objetivo (seguro que tú te has visto en alguna situación parecida alguna vez). Y es que a veces el tiempo apremia y hay que actuar.

Si conoces una solución mejor para añadir código html a una capa vacía se agradecería una muestra, por si me vuelvo a encontrar una situación parecida en el futuro. De nuevo gracias por la ayuda, un saludo.

Última edición por druha; 06/03/2009 a las 05:35
  #6 (permalink)  
Antiguo 06/03/2009, 07:44
Avatar de sweetlydark  
Fecha de Ingreso: septiembre-2008
Mensajes: 391
Antigüedad: 15 años, 7 meses
Puntos: 10
Respuesta: No puedo acceder a los campos de un formulario

Por eso deje mi comentario, no era un regaño solo un poco de información adicional. Ya tienes parte la mejor solución que es usar un variable, lo otro que menciono es porque usar:


Código:
campos="<h3>Datos de usuario:</h3><br>";
campos+="<form name=\"datos\">";
campos+="<input type=\"text\" name=\"nombre\">";
campos+="<input type=\"submit\" onclick=\"validar()\" value=\"Insertar\" name=\"Insertar\">";
campos+="</form>";

Haciendo que tu navegador pase el trabajo extra en buscar el variable, pasar lo esta dentro, para unirlo con otro string y volver a colocarlo en el variable.

Si quiere que se legible puedes usar algo así:

Código:
campos="<h3>Datos de usuario:</h3><br>"+
		"<form name=\"datos\">"+
		"<input type=\"text\" name=\"nombre\">" +
        "<input type=\"submit\" onclick=\"validar()\" value=\"Insertar\" name=\"Insertar\">"
__________________
Por fin vuelvo a tener internet!
http://www.anidandoetiquetas.com/
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 06:40.