2010-05-11 2 views
28

У меня есть следующий код на сайте:события JavaScript не window.onload срабатывает

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 работает отлично, но onload событие не срабатывает. Я пробовал его в Firefox и Chrome, и ни один из них не работает.

Благодарим за помощь и идем на репутацию! ; D

+3

Когда вы используете этот код? Возможно ли, что 'onload' переопределяется позже или присоединяется после срабатывания события' load'? –

+0

Вы были правы. window.onload был явно перезаписан позже. Отправьте свой комментарий как ответ, пожалуйста, так что я могу отметить его как правильный. – 2010-05-11 13:07:51

+0

Выполнено :) Рад, что вы это разрешили! –

ответ

48

Я думаю, что, вероятно, происходит здесь в том, что ваш window.onload идет переопределены позже, проверьте, чтобы убедиться, что это не с помощью таких вещей, как <body onload="">

Вы можете проверить это alert(window.onload) в вашем функцию изменения размера, чтобы увидеть, что на самом деле там прикреплено.

-3

Если это действительно так, это определенно не сработает. Вы не можете назначить функцию обработчику событий до того, как будет объявлена ​​сама функция.

+0

Теперь я изменил порядок, но он все еще не работает. – 2010-05-11 13:03:09

+0

Как сказал Ник Крейвер, было бы полезно узнать более широкий контекст этого и когда он на самом деле называется. – Syntactic

+1

неправильный ответ: в той же области javascript разрешено, но не рекомендуется, объявлять переменную или функцию после ее использования. try: "var a = fun (42); function fun (n) {return n;}; console.log (a);" – Francois

0

Это будет работать, когда вы называете «window.onload» рядом с функцией изменения размера()

2

Это работает для меня, я думаю, ваша проблема в другом месте:

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

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

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

вы можете test it yourself here: http://jsfiddle.net/Dzpeg/2/

Вы уверены, что это единственное событие, называемое onLoad? Может быть, другое событие OnLoad создает конфликт

19

Это произошло, когда я добавил третий код jQuery, который нам нужен для партнера. Я мог бы легко преобразовать устаревшее окно window.onload в документ jQuery. Тем не менее, я хотел бы знать, есть ли современное решение, совместимое с браузером.

IS IS!

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

Знайте, что я знаю, что я могу преобразовать свой код, чтобы использовать маршрут jQuery. И я попрошу нашего партнера реорганизовать свой код, чтобы они перестали влиять на сайты.

Источника, где я нашел исправление ->http://ckon.wordpress.com/2008/07/25/stop-using-windowonload-in-javascript/

0

Перемещение window.onload строки в конец файла JavaScript или после начальной функции, и он будет работать:

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; 

Но это если вы не замените нагрузку. Вместо этого приложите свою функцию к событию 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); 

Это сработало для меня и извините за мой английский.

0

Для меня window.onload не работал, когда написал внутри script type="text/javascript тег.

Вместо этого необходимо написать то же самое в теге script language="Javascript" type="text/javascript, и оно отлично работает.

Смежные вопросы