Так как же работает onload?
День добрый! В каком-то смысле, я разобрался, но не до конца. Проблема в том что есть скрипт, который работает по разному если ставить его в head или в конце, на ряд выше закрывающего тега body. Но почему это происходит по разному если и там и там я использую window.onload? Читаю про это, и вижу: "Обработчик window.onload срабатывает, когда загружается вся страница, включая ресурсы на ней — стили, картинки, ифреймы и т.п.", значит, как я понимаю, скрипт должен заработать только после того как страничка уже загружена полностью, но не тут то было! Привожу пример:
JS код: window.onload = touchRock(); function touchRock() { var userName = prompt("What is your name?", "Insert your name."); if (userName) { alert("Glad to see you, " + userName); document.getElementById('rockImg').src = 'img/rock_happy.gif'; } } и рабочий вариант: <!doctype html> <html> <head> <title>iRock - Виртуальный любимец Rock</title> <meta charset="utf-8"> <link rel="stylesheet" type="text/css" media="screen" href="style.css"> </head> <body> <div class="rock"> <img id="rockImg" src="img/rock.gif" alt="iRock" style="cursor:pointer" /> </div> <script src="js/someAlert.js"></script> </body> </html> а вот и вариант который выдаёт мне ошибку "Cannot set property 'src' of null": <!doctype html> <html> <head> <title>iRock - Виртуальный любимец Rock</title> <meta charset="utf-8"> <link rel="stylesheet" type="text/css" media="screen" href="style.css"> <script src="js/someAlert.js"></script> </head> <body> <div class="rock"> <img id="rockImg" src="img/rock.gif" alt="iRock" style="cursor:pointer" /> </div> </body> </html> Хорошо, ошибка есть, но, тогда интересный вопрос, почему с prompt и alert-ом всё нормально? |
Цитата:
Просто есть корявая попытка присвоить этому обработчику значения, которое вернет функция Цитата:
Правильный вариант использования window.onload = touchRock; |
Хм, да, работает. Иду читать про правильный вызов функции. Спасибо!
|
Цитата:
http://javascript.ru/tutorial/events/intro |
Цитата:
|
Цитата:
window.onload=function(){alert('Me loaded!')}; Нормально это называется closure: var me_loaded=function() {alert('Me loaded!')} Не видите разницы? Ее и нет. А ссылка это имя функции, ее идентификатор, ключ в массиве проранства имен JS. window.onload = me_loaded; // это ссылка А если window.onload=me_loaded(); // тут функция просто выполнится сразу же, как только интерпретатор докатится до этой строки и вы получите алерт без всякой связи с событием. |
http://repl.it/2TM хрен его знает у кого больше проблем с головой, то ли у меня, то ли с JS не всё в порядке, но какого юха первый вариант возвращает херню, при том что 3 функция, работает вроде по тому же принципу, и возвращает то что надо?
|
Вот так надо
return ++num; |
Ёклмн! Я забыл про постфикс и префикс! Виноват, каюсь!
|
Часовой пояс GMT +3, время: 13:21. |