style.left + doctype = no funciona
He estado haciendo unas pruebas de dhtml básico utilizando el doctype de xhtml 1.1, y me encontrado con un problema muy curioso en mozilla.
La prueba simplemente mueve un <div> de un lado a otro de la ventana mediante una función muy básica.
<code>var posX = 50;
function go(){
if(posX < 500 ){
document.getElementById('oApartado').style.left = posX + 10;
posX = posX + 10;
rep = setTimeout(go,100);
window.status = posX;
} else {
clearTimeout(rep);
window.status = posX + "Fin";
return;
}
}</code>Pues resulta que si incluyo la etiqueta doctype correspondiente a xhtml 1.1 (o cualquier otro), Mozilla no me desplaza el div pero sí me ejecuta la función perfectamente ya que el status se actualiza correctamente. Si suprimo la declaración de xhtml, funciona. En IE funciona sin ningún problema en todos los casos.
He validado el html perfectamente, y no tengo la menor idea de qué puede ocurrir. Quizás me falte algo.,..,
meddle
prueba a cambiar
document.getElementById('oApartado').style.left = posX + 10;
por
document.getElementById('oApartado').style.left = parseInt(posX + 10) + "px";
y
setTimeout(go,100)
por
setTimeout("go()",100)
meddle
pero lo mejor seria que me dejaras ver el codigo entero de los dos casos
CarlosJ
vaya.....que celeridad, y además eficiente,.,.,jejeje, pues sí ciertamente funciona así, simplemente con el parseInt ya funciona.
No sabía que la etiqueta doctype pudiera afectar al funcionamiento de un script o a su sintaxis.
Nunca te acostarás sin saber una cosa más.
Muchas gracias.
meddle
de nada :)
los doctypes son muy tocapelotas, hay que ir con cuidadin
por cierto, no te recomiendo el uso de timeout's. leete el tuto de 13thparallel sobre esto: http://13thparallel.org/?issue=2002.02&title=maths
CarlosJ
Ciertamente, pero no imaginaba que influyese en un js externo.
Simplemente estaba comprobando sintaxis con el xhtml y funciones dinámicas simples, y claro el html sólo tenía el body y un div, no había mucho margen de error, de ahí mi sorpresa al ver que con el doctype no hacía caso a parte de la función.
Pero bueno... habrá que tener en cuenta a partir de ahora que el doctype influye incluso a la posición de nuestro asiento :).
En cuanto a los timeouts es cierto, hay que andar con cuidado porque pueden producir "cuelgues" en los procesos si no se los controla bien. Por lo general utilizo setInterval, que viene a ser lo mismo...pero en algunos casos he comprobado que se comporta mejor, aunque no se porqué exactamente, probablemente ha sido simple casualidad.
De todos modos muy buen enlace, para tener muy en cuenta.
meddle
sobretodo lo digo pq dependen mucho de la CPU y pueden producir efectos raros (mucha velocidad en ordenadores nuevos, por ejemplo, cuando los tiemouts se han probado en ordenadores antiguos). ademas de que es mucho mas elegante (y eficiente) el uso de una cantidad de tiempo total y no de cada paso.