2010-05-11 10 views
28

Tengo el siguiente código en un sitio web:evento JavaScript no window.onload desencadenó

window.onload = resize; 
window.onresize = resize; 

function resize(){ 
    heightWithoutHeader = (window.innerHeight - 85) + "px"; 
    document.getElementById("main-table").style.height = heightWithoutHeader; 
    document.getElementById("navigation").style.height = heightWithoutHeader; 
} 

El onresize funciona bien, pero el evento onload nunca se dispara. Lo probé en Firefox y Chrome y ninguno de ellos funciona.

¡Gracias por su ayuda y vaya por la reputación! ; D

+3

¿Cuándo ejecuta este código? ¿Es posible que el 'onload' se esté sobrescribiendo más tarde o que se adjunte después de que se active el evento' load'? –

+0

Tenías razón. window.onload obviamente fue sobrescrito por más tarde. Publique su comentario como respuesta, por lo que puedo marcarlo como el correcto. –

+0

Hecho :) ¡Me alegra que lo hayas resuelto! –

Respuesta

48

Creo que lo que está sucediendo probablemente aquí es que su window.onload está siendo anulados después, comprobar para asegurarse de que no es a través de cosas como <body onload="">

Esto se puede comprobar por alert(window.onload) en su cambiar el tamaño de la función, para ver lo que realmente está conectado allí.

-3

Si es realmente en ese orden, definitivamente no va a funcionar. No puede asignar una función a un controlador de eventos antes de que se declare la función en sí.

+0

He cambiado el orden ahora pero todavía no funciona. –

+0

Como dijo Nick Craver, sería útil conocer el contexto más amplio de esto y cuándo realmente se lo llama. – Syntactic

+1

respuesta incorrecta: en el mismo alcance de JavaScript está permitido, pero no recomendado, declarar una variable o función después de su uso. intente: "var a = fun (42); fun fun (n) {return n;}; console.log (a);" – Francois

0

Este será el trabajo cuando se llama a la "window.onload" junto al cambio de tamaño() la función

2

Esto funciona para mí, creo que el problema está en otra parte:

function resize(){ 
    var tester = document.getElementById("tester"), 
     html = tester.innerHTML 

    tester.innerHTML = html + "resize <br />" 
} 

window.onload = resize; 
window.onresize = resize; 

que pueda pruébelo usted mismo aquí: http://jsfiddle.net/Dzpeg/2/

¿Está seguro de que es el único evento llamado onLoad? Tal vez otro evento onLoad crea un conflicto

19

Tuve esto que suceder cuando agregué el código jQuery de terceros que necesitábamos para un socio. Podría haber convertido fácilmente mi ventana anticuada. Descargar en un documento jQuery listo. Dicho esto, quería saber si hay una solución compatible con navegadores cruzados.

¡Hay!

window.addEventListener ? 
window.addEventListener("load",yourFunction,false) : 
window.attachEvent && window.attachEvent("onload",yourFunction); 

sé que no sé de eso, puedo convertir mi código para utilizar la ruta de jQuery. Y le pediré a nuestro socio que refactorice su código para que dejen de afectar los sitios.

Fuente donde encontré la solución ->http://ckon.wordpress.com/2008/07/25/stop-using-windowonload-in-javascript/

0

mover la línea window.onload al final del archivo JavaScript o después de la función inicial y funcionará:

function resize(){ 
    heightWithoutHeader = (window.innerHeight - 85) + "px"; 
    document.getElementById("main-table").style.height = heightWithoutHeader; 
    document.getElementById("navigation").style.height = heightWithoutHeader; 
} 
// ... 
// at the end of the file... 
window.onload = resize; 
window.onresize = resize; 

Pero es una buena práctica si no reemplaza la carga también. En su lugar, adjunte su función al evento de carga:

function resize(){ 
    heightWithoutHeader = (window.innerHeight - 85) + "px"; 
    document.getElementById("main-table").style.height = heightWithoutHeader; 
    document.getElementById("navigation").style.height = heightWithoutHeader; 
} 
// ... 
// at the end of the file... 
window.addEventListener ? 
    window.addEventListener("load",resize,false) 
    : 
    window.attachEvent && window.attachEvent("onload",resize); 

Eso funcionó para mí y lo siento por mi inglés.

0

Para mí, window.onload no funcionaba cuando escribí dentro de la etiqueta script type="text/javascript.

En su lugar, necesitaba escribir lo mismo en la etiqueta script language="Javascript" type="text/javascript y funcionó bien.

Cuestiones relacionadas