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.event, ident); }
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.value) error += "\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