Сегодня хочу рассказать об одной проблеме, которая часто возникает у людей, которые начинают изучать 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>

Как быть, если нам нужно выполнить код или функцию, только после того, как весь документ полностью загрузится?
Я хочу рассказать о трех способах, как это можно сделать.
Все мои уроки по 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>
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 здесь.
Чтобы оставить сообщение, зарегистрируйтесь/войдите на сайт через:
Email - зарегистрироваться / войти