Сегодня хочу рассказать об одной проблеме, которая часто возникает у людей, которые начинают изучать Javascript.

Они пытаются взаимодействовать с HTML-элементами на странице, которые находятся ниже по коду, чем сам скрипт. Соответственно, скрипт уже подгрузился, а элемент, с которым нужно будет взаимодействовать, еще нет. По этой причине ничего работать не будет.

Особенность языка Javascript в том, что его код выполняется последовательно, строка за строкой, как они написаны в исходном коде.

Вот пример:

<!doctype html>
<html>
<head>
<style type="text/css">
#block {width:100px; height:100px; border:1px solid #ccc;}
</style>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script>
   $("#block").css("background-color", "yellow");
</script>
<meta charset="utf-8">
<title>Документ без названия</title>
</head>
<body>
 <div id="block"></div>
</body>
</html>

К элементу с id #block не будет применяться правило css (background-color:yellow), т.к. строка

   $("#block").css("background-color", "yellow");

Будет выполняться раньше, чем загрузиться html-строка:

<div id="block"></div>

06-07-2013 13-47-43

Как быть, если нам нужно выполнить код или функцию, только после того, как весь документ полностью загрузится?

Я хочу рассказать о трех способах, как это можно сделать.

Все мои уроки по Javascript здесь.

1 способ. С использованием библиотеки jQuery.

Чаще всего сам им пользуюсь, наиболее простое и удобное решение, но требует подключения библиотеки Jquery.

Вот как преобразиться предыдущий, код, если мы воспользуемся следующим методом.

<!doctype html>
<html>
<head>
<style type="text/css">
#block {width:100px; height:100px; border:1px solid #ccc;}
</style>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script>
$(document).ready ( function(){
 $("#block").css("background-color", "yellow"); 
});
</script>

<meta charset="utf-8">
<title>Документ без названия</title>
</head>
<body>
 <div id="block"></div>
</body>
</html>

06-07-2013 13-48-33

2 способ. С помощью элемента body и атрибута onload.

<!doctype html>
<html>
<head>
<style type="text/css">
#block {width:100px; height:100px; border:1px solid #ccc;}
</style>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript">
function funonload() {
    $("#block").css("background-color", "yellow");
}
</script>
<meta charset="utf-8">
<title>Документ без названия</title>
</head>
<body onload="funonload();">
 <div id="block"></div>
</body>
</html>

3 способ. С помощью объекта window и его свойства onload.

<!doctype html>
<html>
<head> 
<style type="text/css">
#block {width:100px; height:100px; border:1px solid #ccc;}
</style>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript"> 
function funonload() {
    $("#block").css("background-color", "yellow");
} 
window.onload = funonload;
</script>
<meta charset="utf-8">
<title>Документ без названия</title>
</head>
<body>
 <div id="block"></div>
</body>
</html>

Выбирайте тот способ, который более всего подходит к вашей ситуации, и применяйте его на практике.

Все мои уроки по Javascript здесь.