Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.01.2021, 20:19
Новичок на форуме
Отправить личное сообщение для SomeUserGG Посмотреть профиль Найти все сообщения от SomeUserGG
 
Регистрация: 10.01.2021
Сообщений: 2

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 и это моё первое обращение на форуме. Если я что-то неправильно указал, задал вопрос неправильно и т.д., то укажите на ошибки, пожалуйста. Заранее, благодарен!)
Ответить с цитированием
  #2 (permalink)  
Старый 10.01.2021, 20:54
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,709

Сообщение от SomeUserGG
Я только начинаю изучать JavaScript
Раз только начинаете изучать, то уясните главное. Браузер обрабатывает текс HTML последовательно. От начала до конца.
Вот он встретил <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>

Последний раз редактировалось voraa, 10.01.2021 в 21:12.
Ответить с цитированием
  #3 (permalink)  
Старый 12.01.2021, 10:46
Новичок на форуме
Отправить личное сообщение для SomeUserGG Посмотреть профиль Найти все сообщения от SomeUserGG
 
Регистрация: 10.01.2021
Сообщений: 2

Спасибо за наводку)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему некорректно работает оператор instanseof? FunnyCat Общие вопросы Javascript 3 29.08.2018 18:05
Создать код что бы сгладывал и потом выводил через prompt melnikov24 Events/DOM/Window 2 24.08.2018 21:29
Js в связке с imacros. Не выполняется условный оператор if ВладосХацкер Общие вопросы Javascript 4 20.09.2017 14:44
Помогите с prompt skrimoza Общие вопросы Javascript 2 10.12.2011 17:10
условный оператор If...else simple Общие вопросы Javascript 6 01.10.2010 22:57