{}const=>[]async()letfn</>var
JSWebПрактика

Как подключить JavaScript к HTML и понять, почему код не работает

Подключим script.js через defer, сделаем рабочую кнопку и разберём путь src. Затем найдём 404, null и синтаксические ошибки через Console и Network.

К

Кодик

Автор

6 мин чтения

Для обычной страницы подключите JavaScript в head строкой script defer src="./script.js". Атрибут defer дождётся разбора HTML, а src укажет путь к файлу. Ниже соберём рабочую кнопку и найдём причину, если скрипт не загрузился, не видит элемент или остановился на ошибке.

Подключить JavaScript означает дать браузеру точный адрес файла и выбрать момент его выполнения. Большинство проблем новичка появляется в одной из этих двух точек: путь написан неверно или скрипт запускается раньше, чем нужная кнопка появилась в HTML.

1Проверить подключение

Добавить defer и вывести контрольное сообщение через console.log.

2Найти элемент

Сверить id в HTML и селектор в document.querySelector.

3Прочитать ошибку

Открыть Console, перейти к первой красной строке и исправить одну причину.

Три способа подключить JavaScript к HTML

JavaScript можно написать прямо внутри HTML или вынести в отдельный файл. Для учебного проекта отдельный script.js удобнее: разметка остаётся читаемой, один скрипт можно подключить к нескольким страницам, а ошибка в пути сразу видна во вкладке Network.

ВариантКогда выполняетсяКогда использовать
defer в headПосле разбора HTML, до DOMContentLoadedОсновной вариант для обычного внешнего скрипта
Перед закрывающим bodyПосле элементов, записанных вышеПростой вариант без defer, но подключение спрятано внизу
type="module"Модуль откладывается автоматическиКогда нужны import и export
Код внутри HTMLЗависит от места тегаКороткая проверка, но не структура проекта
Базовый выбор

Если у вас один файл script.js без import, поместите подключение в head и добавьте defer. Не смешивайте сразу несколько вариантов: так проще понять порядок выполнения.

Схема загрузки HTML и JavaScript с defer: браузер разбирает страницу, загружает script.js и запускает его после появления DOM
defer разрешает загружать файл параллельно, но выполнение ждёт, пока браузер закончит разбирать HTML.

🔥 100 000+ учеников уже с нами

Устал читать теорию?
Пора кодить!

Кодик — приложение, где ты учишься программировать через практику. AI-наставник, интерактивные уроки, реальные проекты.

🤖 AI 24/7
🎓 Сертификаты
💰 Бесплатно
🚀 Начать учиться
Присоединились сегодня

Рабочий пример с кнопкой

Сделаем проект из двух файлов. Кнопка будет менять текст абзаца, а Console покажет, что файл действительно загрузился. Такая маленькая проверка отделяет проблему подключения от ошибки в остальной логике.

Подготовьте два файла
  1. Создайте папку js-start.
  2. Добавьте в неё index.html и script.js. Оба файла должны лежать на одном уровне.
  3. Вставьте первый код в index.html, второй в script.js и сохраните оба файла.
  4. Откройте index.html в браузере, нажмите кнопку и затем откройте инструменты разработчика клавишей F12.
<!doctype html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>JavaScript подключён</title>
  <script defer src="./script.js"></script>
</head>
<body>
  <h1>Проверка JavaScript</h1>
  <button id="changeText">Нажмите меня</button>
  <p id="message">Скрипт ждёт клика</p>
</body>
</html>
console.log("script.js loaded")

const button = document.querySelector("#changeText")
const message = document.querySelector("#message")

button.addEventListener("click", () => {
  message.textContent = "JavaScript работает"
})
Что должно произойти
  • В Console есть строка script.js loaded без красных сообщений.
  • После клика текст меняется на «JavaScript работает».
  • В переменных button и message находятся HTML-элементы, а не null.
Этап пройден. Страница загрузилась без ошибок, контрольная строка видна в Console, а кнопка меняет текст один раз за каждый клик.

Как правильно написать путь в src

Браузер ищет файл относительно адреса текущего HTML-документа. Запись ./script.js означает «возьми script.js из этой же папки». Если скрипт лежит в подпапке js, путь станет ./js/script.js. Две точки поднимают поиск на один уровень вверх.

Где лежит файлПуть из index.htmlСмысл
Рядом с index.html./script.jsТекущая папка
В папке js./js/script.jsВойти в подпапку js
На уровень выше../script.jsПодняться к родительской папке
На другом сайтеПолный https://...Абсолютный сетевой адрес

Сравнение правильных путей к script.js для файла рядом с index.html и для скрипта в подпапке js
Путь читается от HTML-файла: сначала найдите index.html в дереве, затем пройдите от него к script.js.

Использован href вместо src

У тега подключения скрипта адрес задаёт атрибут src. Атрибут href здесь не загрузит JavaScript.

Файл называется script.js.txt

Windows может скрывать расширения. Включите их показ и убедитесь, что имя заканчивается ровно на .js.

Не совпадает регистр

Локально ошибка иногда незаметна, но на хостинге Script.js и script.js могут быть разными файлами.

Если базовая структура страницы пока путается, сначала пройдите курс HTML. Там проще закрепить head, body, атрибуты и относительные пути до того, как добавится логика JavaScript.

Как найти ошибку через Console и Network

Не угадывайте причину по внешнему виду страницы. Откройте инструменты разработчика, обновите страницу и начните с первой красной строки в Console. В сообщении обычно есть имя файла, номер строки и столбца. Клик по ссылке переносит прямо к проблемному месту.

Диагностика за четыре шага
  1. Откройте Console и обновите страницу. Если нет даже script.js loaded, файл, скорее всего, не подключён.
  2. Перейдите в Network, включите фильтр JS и снова обновите страницу. Найдите запрос к script.js.
  3. Статус 404 означает неверный путь или имя. Статус 200 означает, что файл получен и проблему нужно искать внутри кода.
  4. Исправьте первую ошибку Console, сохраните файл, обновите страницу и только потом переходите к следующей.

Алгоритм диагностики JavaScript: проверить console.log, первую ошибку Console, статус script.js в Network и повторить тест
Console отвечает, где код остановился, а Network отвечает, был ли файл загружен вообще.

СимптомЧто проверитьТипичное исправление
Нет console.logNetwork и путь srcИсправить имя или расположение файла
404 для script.jsРегистр и папкиСверить путь с деревом проекта
Unexpected tokenСтроку и соседние скобкиЗакрыть кавычку, скобку или запятую
Cannot read properties of nullСелектор и порядок запускаИсправить id или добавить defer
Ошибок нет, но клик молчитОбработчик событияСверить событие click и выбранную кнопку

Почему скрипт загружен, но код не работает

Статус 200 в Network доказывает только загрузку файла. Дальше выполнение может остановить синтаксическая ошибка, неверный селектор или исключение. JavaScript чувствителен к регистру: getElementById и getElementByID являются разными именами. То же относится к вашим переменным.

querySelector вернул null

В HTML нет элемента с указанным id, допущена опечатка или скрипт запустился раньше DOM. Сверьте #changeText с id="changeText" и оставьте defer.

Ошибка строкой выше

Console может подсветить место, где парсер окончательно запутался. Проверьте также предыдущую строку на незакрытую кавычку, скобку или фигурную скобку.

Старый код после сохранения

Убедитесь, что сохранён нужный файл, затем обновите страницу без кеша. На опубликованном сайте дождитесь нового развёртывания.

Модуль не запускается из файла

Для type="module" и import запускайте локальный сервер, а не открывайте страницу через file://. Модули подчиняются дополнительным правилам загрузки.

Чек-лист рабочего подключения. В HTML используется src, путь совпадает с деревом проекта, defer стоит в head, запрос script.js получает 200, первая красная ошибка исправлена, а селекторы находят элементы.
Короткие ответы
Куда вставлять JavaScript в HTML?

Для внешнего классического файла удобно добавить в head тег с атрибутами defer и src="./script.js". defer дождётся разбора HTML.

Почему JavaScript не видит кнопку?

Чаще всего id в HTML не совпадает с селектором или код выполняется раньше появления кнопки. Сверьте регистр букв и используйте defer.

Как понять, подключился ли script.js?

Добавьте в начало console.log("script.js loaded"). Затем проверьте Console и запрос script.js во вкладке Network.

Нужен ли defer для type=module?

Нет. Скрипты с type="module" по умолчанию выполняются отложенно. Атрибут defer нужен прежде всего обычному внешнему скрипту в head.

Чем src отличается от href?

У тега script адрес JavaScript-файла задаёт src. href используют ссылки и некоторые другие элементы, но не загрузку скрипта.

Что изучать после подключения

Закрепите основу на первой программе JavaScript, затем разберите, как JavaScript работает в браузере. Если интерфейс реагирует неправильно, поможет разбор ошибок кнопки и событий.

В курсе JavaScript в Кодике можно повторить переменные, условия, функции и DOM на коротких задачах. После этого вернитесь к примеру, добавьте вторую кнопку и сделайте отдельный обработчик без копирования готового решения.

🎯Хватит откладывать

Понравилась статья?
Пора применять на практике!

В Кодик ты не просто читаешь — ты сразу пишешь код. Теория + практика = реальный скилл.

Мгновенная практика
🧠AI объяснит код
🏆Сертификат

Без регистрации • Без карты