Ошибка Cannot read properties of null
Ошибка значит: свойство или метод берут у значения null — то есть у элемента, которого скрипт не нашёл. В скобках указано, что именно пытались прочитать:
Uncaught TypeError: Cannot read properties of null (reading 'addEventListener')Здесь document.querySelector(...) или getElementById(...) вернул null, а на нём вызвали addEventListener. Так ошибка звучит в Chrome и Edge; в Firefox текст другой, со словами is null. Похожая Cannot set properties of null — когда свойству null пытаются присвоить значение.
Как найти причину
Откройте страницу с ошибкой, в консоли (F12 → Console) наберите поиск элемента из своего кода — например, document.querySelector("#send") — и нажмите Enter.
Элемент нашёлсяскрипт выполнился раньше, чем появился элемент
Самая частая причина. Скрипт стоит в <head> без defer, браузер выполняет его сразу, а <body> ещё не прочитан. К моменту, когда вы набираете команду в консоли, страница уже загружена, поэтому там элемент находится.
Решение — атрибут defer:
<script src="script.js" defer></script>Или перенесите тег <script> в конец <body>, перед </body>. Если код написан прямо в странице (без src), defer не действует — оберните код в обработчик события DOMContentLoaded:
document.addEventListener("DOMContentLoaded", () => {
const button = document.querySelector("#send");
button.addEventListener("click", () => {
console.log("Нажато");
});
});Ответ nullтакого элемента на странице нет
Селектор не совпадает с разметкой
- Опечатка или другой регистр:
id="Send"иgetElementById("send")— разные имена. - В
querySelectorдляidнужна решётка, для класса — точка:querySelector("#send"),querySelector(".menu"). - В
getElementByIdрешётки нет:getElementById("send"). С решёткой он ищетid="#send"и не находит.
Элемент есть только на другой странице
Один файл скрипта подключён ко многим страницам, а кнопка есть только на одной. На остальных querySelector возвращает null. Проверяйте перед использованием:
const form = document.querySelector("#order-form");
if (form) {
form.addEventListener("submit", (event) => {
event.preventDefault();
console.log("Заказ отправлен");
});
}Короткая запись того же — form?.addEventListener(...). Но не ставьте ?. везде подряд: настоящую ошибку в селекторе она тоже молча спрячет.
То же самое с undefined
Cannot read properties of undefined (reading 'name') — свойство читают у undefined. Обычно это элемент массива за его пределами, свойство, которого нет у объекта, или данные с сервера другого вида, чем ожидалось:
const users = [{ name: "Аня" }];
try {
console.log(users[1].name);
} catch (err) {
console.log(err.message);
}
console.log(users[1]?.name);Cannot read properties of undefined (reading 'name')
undefinedВыведите значение перед проблемной строкой — console.log(users) — и посмотрите, что в нём на самом деле.