2010-05-11 21 views
28

Ho il seguente codice in un sito web:evento JavaScript non window.onload innescato

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; 
} 

Il onresize funziona bene, ma l'evento onload mai incendi. L'ho provato in Firefox e Chrome e nessuno dei due funziona.

Grazie per il vostro aiuto e per la reputazione! ; D

+3

quando sono in esecuzione questo codice? È possibile che "onload" venga sovrascritto in un secondo momento o che venga allegato dopo l'attivazione dell'evento "load"? –

+0

Avevi ragione. window.onload è stato ovviamente sovrascritto da in seguito. Pubblica il tuo commento come risposta per favore, quindi posso spuntarlo come quello giusto. –

+0

Fatto :) Sono contento che l'hai risolto! –

risposta

48

Penso che quello che sta probabilmente accadendo qui è che il vostro window.onload è essere sovrascritti in seguito, controllare per essere sicuri che non è attraverso cose come <body onload="">

È possibile controllare questo alert(window.onload) nella tua funzione di ridimensionamento, per vedere ciò che è effettivamente collegato lì.

-3

Se è davvero in questo ordine, sicuramente non funzionerà. Non è possibile assegnare una funzione a un gestore eventi prima che la funzione stessa sia dichiarata.

+0

Ora ho cambiato l'ordine ma non funziona ancora. –

+0

Come diceva Nick Craver, sarebbe utile conoscere il contesto più ampio di questo e quando viene effettivamente chiamato. – Syntactic

+1

risposta errata: nello stesso ambito javascript è consentito, ma non consigliato, dichiarare una variabile o una funzione dopo il suo utilizzo. prova: "var a = fun (42); function fun (n) {return n;}; console.log (a);" – Francois

0

Questo sarà il lavoro quando si chiama il "window.onload" accanto alla funzione di ridimensionamento()

2

Questo funziona per me, penso che il problema è da qualche altra parte:

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

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

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

è possibile prova tu stesso qui: http://jsfiddle.net/Dzpeg/2/

sei sicuro che è l'unico evento chiamato onLoad? Forse un altro evento onLoad crea un conflitto

19

Ho avuto questo problema quando ho aggiunto il codice jQuery di terze parti di cui avevamo bisogno per un partner. Avrei potuto facilmente convertire la mia finestra antiquata. Scarica un documento jQuery pronto. Detto questo, volevo sapere se esiste una soluzione moderna compatibile con i browser.

C'è IS!

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

sai che io so che, posso convertire il mio codice per utilizzare il percorso jQuery. E chiederò al nostro partner di refactoring il loro codice in modo che smettano di influenzare i siti.

Fonte dove ho trovato la soluzione ->http://ckon.wordpress.com/2008/07/25/stop-using-windowonload-in-javascript/

0

spostare la linea window.onload alla fine del file javascript o dopo la funzione iniziale e che funzionerà:

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; 

Ma è una buona pratica se non si sostituisce anche l'onload. Collega invece la tua funzione all'evento onload:

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); 

Questo ha funzionato per me e mi dispiace per il mio inglese.

0

Per me, window.onload non funzionava quando ha scritto all'interno script type="text/javascript tag.

Invece, necessario per scrivere la stessa in script language="Javascript" type="text/javascript tag e ha funzionato bene.