Prompt и условный оператор
Здравия желаю! У меня появилась проблема. Я создал переменную pass, значение которой равно тексту, введённому в prompt. Далее добавил условный оператор. Если переменная pass равняется определённому значению, то блок admin_block должен принять свойство display, значение которого block. В противном случае, user_block должен принять свойство display со значением block.
После ввода любого значения в prompt оба элемента принимают свойство display со значением block. В консоли появляется ошибка: "Uncaught TypeError: Cannot read property 'style' of null". <html> <head> <title>GGBA</title> <link rel="stylesheet" href="css/style.css" type="text/css" /> <script> var pass = prompt('What is your name?'); if (pass == 'Admin') { document.getElementById('admin_block').style.display = 'block'; document.getElementById('user_block').style.display = 'none'; } else if (pass != 'Admin') { document.getElementById('admin_block').style.display = 'none'; document.getElementById('user_block').style.display = 'block'; } </script> </head> <body> <center> <div id="admin_block"> <span>GT: </span><a href="">CLICK</a> </div> <div id="user_block"> <span class="fun">Hello!</span> </div> </center> </body> </html> P.S.: Я только начинаю изучать JavaScript и это моё первое обращение на форуме. Если я что-то неправильно указал, задал вопрос неправильно и т.д., то укажите на ошибки, пожалуйста. Заранее, благодарен!) |
Цитата:
Вот он встретил <script> и тут же начинает выполнять то, что там написано. Вот он встретил document.getElementById('admin_block'). А ему еще не встречался элемент с id = admin_block Поэтому надо ставить все скрипты, которые обращаются к элементам, после этих элементов. Например в конец <body> <html> <head> <title>GGBA</title> <!-- <link rel="stylesheet" href="css/style.css" type="text/css" /> --> </head> <body> <center> <div id="admin_block"> <span>GT: </span><a href="">CLICK</a> </div> <div id="user_block"> <span class="fun">Hello!</span> </div> </center> <script> var pass = prompt('What is your name?'); if (pass == 'Admin') { document.getElementById('admin_block').style.display = 'block'; document.getElementById('user_block').style.display = 'none'; } else if (pass != 'Admin') { document.getElementById('admin_block').style.display = 'none'; document.getElementById('user_block').style.display = 'block'; } </script> </body> </html> Но в этом случае, хоть документ и разобран, но функция promt вызывается раньше, чем он успел показаться на экране. Или указывать, что что то должно исполняться, после события окончания загрузки документа, когда весь HTML будет разобран и страница создана <html> <head> <title>GGBA</title> <!-- <link rel="stylesheet" href="css/style.css" type="text/css" /> --> <script> window.addEventListener ('load', () => { var pass = prompt('What is your name?'); if (pass == 'Admin') { document.getElementById('admin_block').style.display = 'block'; document.getElementById('user_block').style.display = 'none'; } else if (pass != 'Admin') { document.getElementById('admin_block').style.display = 'none'; document.getElementById('user_block').style.display = 'block'; } }) </script> </head> <body> <center> <div id="admin_block"> <span>GT: </span><a href="">CLICK</a> </div> <div id="user_block"> <span class="fun">Hello!</span> </div> </center> </body> </html> |
Спасибо за наводку)
|
Часовой пояс GMT +3, время: 19:15. |