Uncaught TypeError: Cannot read property 'style' of null

115
09 января 2021, 03:20

Здраствуйте, у меня появилась проблема - Uncaught TypeError: Cannot read property 'style' of null

function showSignin () {
    var container = document.querySelector('.container');
    var form = document.createElement('div');
    form.className = 'signin';
    form.innerHTML = '<div id="gray"></div><div class="window"><img class="close" src="../img/cancel-cross.svg" onclick="closeSignin()"><div class="form"><h2 style="color: #E8BB49;">Авторизация</h2><form method="post" action="includes/authorization.php"><br /><input type="text" name="username" required placeholder="Имя пользователя" class="input__authorization"><br /><br /><input type="password" name="password" required placeholder="Пароль" class="input__authorization"><br /><br /><button type="submit" name="button" style="background: #E8BB49; border: 1px solid #E8BB49; border-radius: 4px; color: #403C3C; width: 300px; height: 40px; font-size: 24px;">Войти</button></form></div></div>';
    var gray = document.getElementById('gray');
    gray.style.backgroundColor = 'rgba(1, 1, 1, 0.75)';
    gray.style.position = 'fixed';
    gray.style.left = 0;
    gray.style.right = 0;
    gray.style.top = 0;
    gray.style.bottom = 0;
    gray.style.zIndex = -1;
    gray.style.display = 'none';
    container.insertBefore(form, container.children[0]);
    gray.style.display = 'block';
}
Answer 1

form же создается динамически... внутри него пихаются HTML-элементы, но вы запрашиваете элемент по id еще до того, как он добавлен на страницу. Запросить getElementById() можно только после того, когда элемент будет добавлен в документ, например через appendChild()

Есть два варианта... либо gray тоже создавать динамически и получить его в процессе создания, либо сперва добавить form куда надо (ваша строчка .insertBefore), а уже потом запросить оттуда id.

Но в вашем случае нет необходимости получать элемент. Т.к. вы используете его только чтобы добавить стили... а их можно прямо в CSS и записать сразу:

<style> #gray { background-color: rgba(1, 1, 1, 0.75); и т.д. } </style>

А если всё же бывает острая необходимость добавлять много стилей именно в JS, это легче записывать в таком виде:

element.style.cssText = "все стили одной строчкой";
READ ALSO
Remove в JavaScript

Remove в JavaScript

Не получается удалить объект

118
Закруглить края у canvas

Закруглить края у canvas

Есть код как тут закруглить края

131
Поймать свайп вправо

Поймать свайп вправо

Есть объект <div class="music--container">Как на JS поймать тот момент, когда 50% левой области объекта пытаются потянуть вправо и выполнить к примеру...

115
Открытие списка select только вниз

Открытие списка select только вниз

Есть выпадающий список select

100