Foros del Web » Programando para Internet » Javascript »

Refrescar objetos DOM

Estas en el tema de Refrescar objetos DOM en el foro de Javascript en Foros del Web. Muy buenas!! Hoy necesito inspiración, y como no existen los dioses, pues recurro al foro! Bueno, la cosa es que tengo un formulario normal y ...
  #1 (permalink)  
Antiguo 12/05/2008, 08:54
Avatar de mgusdl  
Fecha de Ingreso: abril-2007
Ubicación: Malaga, España
Mensajes: 190
Antigüedad: 17 años
Puntos: 5
Refrescar objetos DOM

Muy buenas!!
Hoy necesito inspiración, y como no existen los dioses, pues recurro al foro!

Bueno, la cosa es que tengo un formulario normal y corriente con el perfil de usuario y para cambiar la clave pues he creado un panel div con otro formulario. La cosa funciona teta teta hasta que la pruebo en el IE, donde al darle a enviar salta con que no reconoce el objeto y por supuesto no recibo los objetos para validar con la función "cambiarClave()"

El código JS para generar el panel es el siguiente:
Código PHP:
function chClave()
    {
    var 
ident 'clave';
    if (
document.getElementById(ident)) return;
    var 
elmRef document.getElementById('btcl');
    var 
dv document.createElement('div');
    
dv.id ident;
    
dv.className 'ventana centrar';
    
dv.style.width '300px';
    
dv.style.height '200px';
    
dv.style.left = (elmRef.offsetLeft 30) + 'px';
    
dv.style.top = (elmRef.offsetTop 30) + 'px';
    
    var 
sp document.createElement('span');
    
sp.onclick = function() { cerrar(ident); }
    
sp.className 'cerrar';
    
sp.appendChild(document.createTextNode("X"));
    
dv.appendChild(sp);
    
    var 
cabeza document.createElement('div');
    
cabeza.className 'cabeza';
    
cabeza.onmousedown = function (evt) { dragStart(evt || window.eventident); }
    
cabeza.appendChild(document.createTextNode('Cambiar clave'));
    
dv.appendChild(cabeza);

    
dv.appendChild(document.createElement('br'));
    
    var 
frm document.createElement('form');
    
frm.onsubmit = function () { return cambiarClave(); }
    
frm.name 'cambiaclave';
    
frm.action '#';
    
frm.method 'post';

    var 
campo document.createElement('input');
    
campo.type 'hidden';
    
campo.name 'formulario';
    
campo.value'chclave';
    
frm.appendChild(campo);

    var 
campo document.createElement('input');
    
campo.type 'hidden';
    
campo.name 'go';
    
campo.value'do=inicio&sub=configura';
    
frm.appendChild(campo);

    var 
lbl document.createElement('label');
    
lbl.setAttribute('for''clav');
    
lbl.appendChild(document.createTextNode('clave actual:'));
    
frm.appendChild(lbl);

    
campo document.createElement('input');
    
campo.type 'password';
    
campo.name 'clav';
    
campo.id 'clav';
    
frm.appendChild(campo);

    
frm.appendChild(document.createElement('br'));
    
frm.appendChild(document.createElement('br'));
    
    
lbl document.createElement('label');
    
lbl.setAttribute('for''cln1');
    
lbl.appendChild(document.createTextNode('clave nueva:'));
    
frm.appendChild(lbl);

    
campo document.createElement('input');
    
campo.type 'password';
    
campo.name 'cln1';
    
campo.id 'cln1';
    
frm.appendChild(campo);
    
    
frm.appendChild(document.createElement('br'));
    
frm.appendChild(document.createElement('br'));
    
    
lbl document.createElement('label');
    
lbl.setAttribute('for''cln2');
    
lbl.appendChild(document.createTextNode('repita la clave:'));
    
frm.appendChild(lbl);

    
campo document.createElement('input');
    
campo.type 'password';
    
campo.name 'cln2';
    
campo.id 'cln2';
    
frm.appendChild(campo);

    
frm.appendChild(document.createElement('br'));
    
frm.appendChild(document.createElement('br'));

    var 
btn document.createElement('input');
    
btn.type 'submit';
    
btn.value 'cambiar';
    
frm.appendChild(btn);

    
dv.appendChild(frm);

    
document.body.appendChild(dv);
    }

function 
cambiarClave()
    {
    var 
frm document.forms.cambiaclave;
    var 
error '';
    if (
frm.clav.value == '' || frm.cln1.value == '' || frm.cln2.value == ''error += "\n - Queda al menos un campo sin rellenar";
    else if (
frm.cln1.value != frm.cln2.valueerror += "\n - Las claves no coinciden";
    if (
error != '') { alert('Se preodujeron los siguientes errores:' error); return false; }
    return 
true;
    } 
El aspecto resultante del panel es el siguiente:


Obviamente el problema es que IE no actualiza la biblioteca de objetos DOM al crear los elementos y envía el formulario sin los datos (manda huevos). En otros navegadores si funciona como debe, ejecutando sin problemas la función llamada en el evento onSubmit.

Lo mismo el problema es de mi navegador (en este momento aún no he probado en otro equipo) y estoy buscando un parche para IE que salió hace unos meses para probar.
También me gustaría saber si existe algún metodo para obligar al navegador a refrescar la biblioteca de objetos DOM.

Bueno, a ver si sabeis algo!
Hagan sus apuestas!!

Gracias y salu2

Última edición por mgusdl; 12/05/2008 a las 09:09 Razón: errores en la descripcion del error
  #2 (permalink)  
Antiguo 12/05/2008, 09:21
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 1 mes
Puntos: 1284
Re: Refrescar objetos DOM

Hola Paisano:

La verdad es que yo ya he tirado la toalla con explorer queriendo referenciar elementos de formularios creados dinámicamente mediante su nombre (atributo name...) y es que lo probé usando mayúsculas, minúsculas, mediante get(set)attribute... entre corchetes... y no hay forma... la única forma es dejar de usar el nombre y referenciar por el id... aunque ya no dependería del formulario sino del documento... o no crear el control con createElement sino duplicando un control existente en la página (podría estar oculto y no depender del form... pero de esa manera reconoce el atributo name...)

Espero haberte ayudado.

Por cierto, lo de LEHMBERG me ha picado ... ¿tienes que ver con la academia?... si es así, saluda a Fran y a Carlos de parte de Pepe de Torremolinos (seguro que ellos me recuerdan)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 12/05/2008, 09:36
Avatar de mgusdl  
Fecha de Ingreso: abril-2007
Ubicación: Malaga, España
Mensajes: 190
Antigüedad: 17 años
Puntos: 5
Re: Refrescar objetos DOM

Cita:
Iniciado por caricatos Ver Mensaje
Hola Paisano:

La verdad es que yo ya he tirado la toalla con explorer queriendo referenciar elementos de formularios creados dinámicamente mediante su nombre (atributo name...) y es que lo probé usando mayúsculas, minúsculas, mediante get(set)attribute... entre corchetes... y no hay forma... la única forma es dejar de usar el nombre y referenciar por el id... aunque ya no dependería del formulario sino del documento... o no crear el control con createElement sino duplicando un control existente en la página (podría estar oculto y no depender del form... pero de esa manera reconoce el atributo name...)

Espero haberte ayudado.

Por cierto, lo de LEHMBERG me ha picado ... ¿tienes que ver con la academia?... si es así, saluda a Fran y a Carlos de parte de Pepe de Torremolinos (seguro que ellos me recuerdan)

Saludos
Pues eso haré, llamaré a los objetos por ID y no por NAME :(

Si, grupo Lehmberg tiene una academia en el centro. Si son quienes creo que son están en Espacio Formación, yo estoy en Lehmberg Consultores. Los saludaré de tu parte cuando me los cruce, aunque a Fran será más dificil, eso de saludar no está en su mundo.
  #4 (permalink)  
Antiguo 12/05/2008, 09:52
Avatar de mgusdl  
Fecha de Ingreso: abril-2007
Ubicación: Malaga, España
Mensajes: 190
Antigüedad: 17 años
Puntos: 5
Re: Refrescar objetos DOM

Hecho, cambio las referencias de nombre a id y tira millas.
  #5 (permalink)  
Antiguo 12/05/2008, 10:00
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 1 mes
Puntos: 1284
Re: Refrescar objetos DOM

Hola:

Me alegro que la solución haya sido tan fácil (no siempre es así).

P.D: Te envié un mp.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
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 14:49.