Как подключить JavaScript к HTML
Положите код в файл script.js рядом со страницей и подключите его в <head> с атрибутом defer:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Страница</title>
<script src="script.js" defer></script>
</head>
<body>
<button id="hello">Нажмите</button>
</body>
</html>document.querySelector("#hello").addEventListener("click", () => {
alert("Скрипт подключён");
});defer велит браузеру скачать файл сразу, а выполнить, когда вся страница прочитана. Поэтому скрипт находит любые элементы <body>, где бы ни стоял тег. Несколько скриптов с defer выполняются в том порядке, в каком подключены.
Другие способы
- Тег в конце
<body>—<script src="script.js"></script>прямо перед</body>. Работает так же: к этому месту все элементы уже прочитаны. Так писали до появленияdefer, этот способ и сейчас встречается часто. - Код прямо в странице — между
<script>и</script>, безsrc. Годится для пары строк;deferна таком теге не действует, поэтому ставьте его в конец<body>. async— файл выполняется сразу, как только скачается, не дожидаясь страницы и других скриптов. Подходит для независимых скриптов вроде счётчиков посещений, но не для кода, которому нужны элементы страницы.- Модуль —
<script type="module" src="main.js"></script>. В модулях работаютimportиexport, а выполняются они, как сdefer, после чтения страницы. Со страницы, открытой двойным щелчком (адресfile://), Chrome и Edge модули не загружают: нужен локальный веб-сервер.
Путь к файлу
Путь в src отсчитывается от папки, где лежит страница:
| Где лежит файл | Что писать в src |
|---|---|
| рядом со страницей | script.js |
в папке js рядом со страницей | js/script.js |
| на уровень выше | ../script.js |
| от корня сайта (на сервере) | /js/script.js |
Регистр букв в именах важен: на серверах с Linux Script.js и script.js — разные файлы.
Скрипт не работает — что проверить
Откройте консоль (F12 → Console) и перезагрузите страницу.
- Ошибка 404 или
net::ERR_FILE_NOT_FOUND— неверный путь или имя файла. На вкладке Network (Сеть) видно, по какому адресу браузер искал файл. Cannot read properties of null— скрипт выполнился до появления элемента или селектор с опечаткой. Решение — в справке Ошибка Cannot read properties of null.- Тег закрыт как
<script src="script.js" />. В HTML так нельзя: нужен парный тег<script src="script.js"></script>. Без закрывающего тега браузер считает следующую за ним разметку содержимым<script>, и часть страницы пропадает. - Код внутри тега с
src. Если у<script>естьsrc, текст между тегами браузер не выполняет — для своего кода нужен отдельный тег. - Браузер показывает старую версию файла. Обновите страницу без кэша:
Ctrl+F5илиCtrl+Shift+R. - Ошибок нет, но и реакции нет. Добавьте в начало файла
console.log("script.js загружен"): если строки в консоли нет, файл не подключился.