2010-05-11 10 views
28

Mam następujący kod na stronie internetowej:zdarzenie JavaScript nie window.onload wyzwalane

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

onresize działa dobrze, ale zdarzenie onload nie odpala. Próbowałem go w Firefoksie i Chrome i żadne z nich nie działa.

Dziękuję za pomoc i sięgnij po reputację! ; D

+3

Kiedy używasz tego kodu? Czy jest możliwe, że 'onload' jest zastępowane później, czy jest dołączane po wywołaniu zdarzenia' load'? –

+0

Miałeś rację. window.onload został oczywiście nadpisany przez później. Opublikuj swój komentarz jako odpowiedź, więc mogę zaznaczyć to jako właściwą. –

+0

Gotowe :) Cieszę się, że to rozwiązałeś! –

Odpowiedz

48

myślę co zapewne dzieje się tutaj jest to, że window.onload jest nadpisane później, upewnij się, że nie jest to poprzez takie rzeczy jak <body onload="">

Można to sprawdzić przez alert(window.onload) w swojej ponownie funkcja rozmiaru, aby zobaczyć, co faktycznie jest tam dołączone.

-3

Jeśli to naprawdę w tej kolejności, to na pewno nie zadziała. Nie można przypisać funkcji do obsługi zdarzenia przed deklaracją samej funkcji.

+0

Zmieniłem kolejność teraz, ale nadal nie działa. –

+0

Jak powiedział Nick Craver, pomocne byłoby poznanie szerszego kontekstu tego i kiedy jest on faktycznie wywoływany. – Syntactic

+1

zła odpowiedź: w tym samym zakresie javascript dozwolone jest, ale nie zalecane, zadeklarowanie zmiennej lub funkcji po jej użyciu. spróbuj: "var a = fun (42); function fun (n) {return n;}; console.log (a);" – Francois

0

To będzie dzieło, kiedy nazywają „window.onload” obok zmiany rozmiaru function()

2

Działa to dla mnie, myślę, że problem jest gdzieś indziej:

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

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

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

można przetestuj to sam tutaj: http://jsfiddle.net/Dzpeg/2/

czy jesteś pewien, że jest to jedyne wydarzenie o nazwie onLoad? Może Innym zdarzeniem onload tworzy konflikt

19

Miałem to miejsce, gdy dodałem trzeci kod jQuery, którego potrzebowaliśmy dla partnera. Mogłem łatwo przekonwertować moje przestarzałe window.onload na gotowy dokument jQuery. Powiedziałem, że chciałbym wiedzieć, czy istnieje nowoczesne rozwiązanie kompatybilne z przeglądarką.

Jest!

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

Wiedz, że wiem, że mogę przekonwertować mój kod, aby użyć trasy jQuery. I poproszę naszego partnera o refaktorowanie kodu, aby przestali wpływać na witryny.

Źródło, gdzie znalazłem poprawkę ->http://ckon.wordpress.com/2008/07/25/stop-using-windowonload-in-javascript/

0

Przesuń linię window.onload do końca pliku javascript lub po początkowym funkcji i będzie działać:

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; 

Ale to najlepsza praktyka, jeśli nie zamienisz również onload. Zamiast tego dołącz swoją funkcję do zdarzenia 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); 

To zadziałało dla mnie i przepraszam za mój angielski.

0

Dla mnie window.onload nie działał po napisaniu wewnątrz tagu script type="text/javascript.

Zamiast tego konieczne było napisanie tego samego w tagu script language="Javascript" type="text/javascript i działało dobrze.

Powiązane problemy