Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Назначение обработчиков Через свойство объекта (https://javascript.ru/forum/misc/11650-naznachenie-obrabotchikov-cherez-svojjstvo-obekta.html)

igor' 05.09.2010 18:14

Назначение обработчиков Через свойство объекта
 
Читал статью по Введение в события Назначение обработчиков Через свойство объекта
document.getElementById('myElement').onclick = function() {
    alert('Спасибо')
}
<input id="myElement" type="button" value="Нажми меня"/>

Но когда я вынес в отдельный файл js,
<script type="text/javascript" src="script.js"></script>
document.getElementById('myElement').onclick = function() {
    alert('Спасибо')
}
работать перестало, объясните почему?
Может это как-то связано с:
Все вызовы типа getElementById должны запускаться после описания соответствующего HTML-узла, а лучше - после окончания загрузки страницы.
Иначе узел просто не будет найден

Или просто записывать иначе ?
или этот вариант используется только на html страничке ?

monolithed 05.09.2010 18:20

<script type="text/javascript">
window.onload = function(){
	document.getElementById('myElement').onclick = function() {
		alert('Спасибо');
	};
};
</script>
<input id="myElement" type="button" value="Нажми меня"/>

igor' 05.09.2010 18:47

Спасибо ! :)

subzey 05.09.2010 20:07

Igor',
да, Вы правы. Разбор html производится сверху-вниз, и если скрипт запускается из <head>, на момент, когда он работает, <body> еще не существует.

Решение - то, что предложил Monolithed, либо диспетчеризация событий на уровне документа (яркий пример - jQuery live()).


Часовой пояс GMT +3, время: 22:33.