Foros del Web » Programando para Internet » Javascript »

creación dinámica de formularios (explorer)

Estas en el tema de creación dinámica de formularios (explorer) en el foro de Javascript en Foros del Web. Hola: Para ir al grano voy a poner el código que crea un formulario y que en explorer no funciona: Código: <html> <head> <script type="text/javascript"> ...
  #1 (permalink)  
Antiguo 24/08/2006, 08:30
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
creación dinámica de formularios (explorer)

Hola:

Para ir al grano voy a poner el código que crea un formulario y que en explorer no funciona:

Código:
<html>
<head>
<script type="text/javascript">
function nF() {
 f = document.createElement("form");
 i = document.createElement("input");
 b = document.createElement("button");
 i.setAttribute("type", "text");
 b.setAttribute("type", "button");
 b.appendChild(document.createTextNode("prueba"));
 i.setAttribute("name", "xx");
 f.setAttribute("name", "f");
 if (document.all) b.attachEvent("onclick", hola);
 else b.addEventListener("click", hola, true);
 f.appendChild(i);
 f.appendChild(b);
 document.body.appendChild(f);
}

function hola(e) {
 if (document.all)
  alert(event.srcElement.form.xx.value);
 else
  alert(e.target.form.xx.value);
}

</script>
</head>
<body onload="nF()">
</body>
</html>
Un botón debería mostrar una alerta con el texto introducido en un campo de texto... va bien en opera y firefox pero no cuela en explorer... y creo que es código correcto.

Gracias
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #2 (permalink)  
Antiguo 24/08/2006, 16:33
Avatar de Cap.Buscapina  
Fecha de Ingreso: octubre-2004
Ubicación: Argentina
Mensajes: 836
Antigüedad: 19 años, 6 meses
Puntos: 4
parece que adicionandole "document" previo a la llamada al form está el 50% de la solucion.

El otro 50% es que parece que IE asigna el nombre dinamicamente, pero solo lo puedes llamar por el índice

Cita:
<html>
<head>
<script type="text/javascript">
function nF() {
f = document.createElement("form");
i = document.createElement("input");
b = document.createElement("button");
i.setAttribute("type", "text");
b.setAttribute("type", "button");
b.appendChild(document.createTextNode("prueba"));
i.setAttribute("name", "xx");
f.setAttribute("name", "f");
if (document.all) b.attachEvent("onclick", hola);
else b.addEventListener("click", hola, true);
f.appendChild(i);
f.appendChild(b);
document.body.appendChild(f);
}
function hola(e) {
if (document.all)
alert(event.srcElement.document.forms[0][0].value);
else
alert(e.target.form.xx.value);
}

</script>
</head>
<body onload="nF()">
</body>
</html>

no se bien a que apunta este codigo por lo que no se si esta es la solucion integral. Tiene algo que ver con frames o popup?

saludos

PD: la linea verde sobra (creo).
__________________
by Capitán Buscapina
.

Última edición por Cap.Buscapina; 24/08/2006 a las 16:39
  #3 (permalink)  
Antiguo 24/08/2006, 20:10
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola Capi:

Sobre la línea verde: tipo de botón por defecto, en explorer se crean los botones con el tipo button y en FF y opera con submit así que me parece que está bien puesto...

Y la indexación no me vale (no lo había considerado, pero para mis propósitos...)

Verás, el script donde lo uso está en esta página: Fechas... el calendario de pie de página no funciona con este sistema... el del principio sí, pero el formulario se crea con document.write... ¡otro caso polstergate (o como se escriba)!

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 25/08/2006, 10:08
Avatar de Cap.Buscapina  
Fecha de Ingreso: octubre-2004
Ubicación: Argentina
Mensajes: 836
Antigüedad: 19 años, 6 meses
Puntos: 4
creo que ahora si

el problema parece ser los name's y los id's en IE.

teniendo como base el código del calendario que publicas en tu pagina , solamente le tenés que agregar el atributo "id" a cada elemento del form (y el form inclusive).

sería así:
Cita:
.....
var _calendario = document.createElement("form");
_calendario.name = el_id;
_calendario.id = el_id;


.....
_control = document.createElement("select");
_control.setAttribute("id", "mes");
_control.setAttribute("name", "mes");


.....


_control.name = "aaaa";
_control.id = "aaaa";
No pongo todo el codigo porque no creo que haga falta ya que con solo esos cambios funcionaria en IE.

saludos
__________________
by Capitán Buscapina
.

Última edición por Cap.Buscapina; 25/08/2006 a las 10:14
  #5 (permalink)  
Antiguo 25/08/2006, 10:11
Avatar de Cap.Buscapina  
Fecha de Ingreso: octubre-2004
Ubicación: Argentina
Mensajes: 836
Antigüedad: 19 años, 6 meses
Puntos: 4
creo que ahora si

<editando>
disculpas, se repitio el mismo mensaje
</editando>
__________________
by Capitán Buscapina
.

Última edición por Cap.Buscapina; 25/08/2006 a las 10:13 Razón: es que se escribio dos veces lo mismo
  #6 (permalink)  
Antiguo 25/08/2006, 10:34
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola Capi, gracias:

Verás, no estoy en la máquina del código, y tengo el tiempo un poco escaso, pero en cuanto pueda lo pruebo y te cuento...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #7 (permalink)  
Antiguo 26/08/2006, 08:27
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Comprobado. Ya he modificado el script, aunque el id se duplicaba porque lo usaba en la tabla... pero lo quité de la tabla y no ha cambiado el aspecto, así que me vale.

Lo miraré con más detenimiento y pondré los créditos.

Muchas gracias, Capi.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #8 (permalink)  
Antiguo 26/08/2006, 09:44
Avatar de Cap.Buscapina  
Fecha de Ingreso: octubre-2004
Ubicación: Argentina
Mensajes: 836
Antigüedad: 19 años, 6 meses
Puntos: 4
de nada, mi estimado

ha sido un placer.

saludos
__________________
by Capitán Buscapina
.
  #9 (permalink)  
Antiguo 26/08/2006, 13:01
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
consulta

Hola, Caricatos, Hola Capi!
No tengo conocimientos acerca de asignar eventos de esta manera y pregunto para aprender solamente. Es decir, con mis preguntas no estoy afirmando nada porque, repito, estoy iniciándome en los eventos del DOM y necesito que me orienten un poco a ver si estoy entendiendo o estoy totalmente confundido (incluso les agradecería lgún link para seguir aprendiendo):
En esta función:
Código:
function hola(e) {
if (document.all)
alert(event.srcElement.document.forms[0][0].value);
else
alert(e.target.form.xx.value);
}
Porqué es necesario utilizar event.srcElement o e.target?
srcElement y target no indican el nodo que generó el evento? Es por el burbujeo que hace que el valor de e.target y event.srcElement terminen convirtiéndose en document? Y en ese caso no conviene detener el burbujeo o simplemente llamar al alert con este argumento en ambos navegadores: document.forms[0][0].value
  #10 (permalink)  
Antiguo 26/08/2006, 20:16
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola Panino5001:

La razón de usar e.target y event.srcElement se debe a que para poner un manejador de eventos con el DOM hay que hacerlo con los métodos attachEvent y addEventListener (para explorer y mozilla + navegadores estándar respectivamente)... y mediante esa técnica no se pueden pasar parámetros; por ejemplo, pudiendo usar como parámetro el objeto this es fácil obtener el formulario de donde depende el botón que hemos creado dinámicamente, pero al no poder usar parámetros obtenemos el elemento donde se produjo el evento de esa manera.

Sobre el burbujeo, creo que en este caso no debería haber (pero es un tema que no controlo)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #11 (permalink)  
Antiguo 26/08/2006, 21:46
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Gracias, Caricatos, queda claro. Un abrazo, Andrés
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 17:22.