Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.04.2018, 13:09
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Срабатывание клика
Добрый день, объясните пожалуйста, почему условие не срабатывает при первом клике? При последующих кликах все работает хорошо
<style type="text/css">
            #box{display: none}
</style>
    <body>
        <div id="date"></div>
        <div id="box">Вот</div>
        <button id="onclick" onclick="box_click()">Кнопка</button>
        <script type="text/javascript">
            function box_click() {
                var c = document.getElementById("box");
                if(c.style.display === 'none'){
                   c.style.display = 'inline';
                } else{
                    c.style.display = 'none';
                };
            }
        </script>
Ответить с цитированием
  #2 (permalink)  
Старый 09.04.2018, 13:20
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,733

Artur_Hopf, условие, в общем-то, выполняется.
Изначально у кнопки style.display не равен строке 'none', поэтому кнопка скрывается.
Попробуйте так:
<style type="text/css">
            #box{display: none}
</style>
    <body>
        <div id="date"></div>
        <div id="box">Вот</div>
        <button id="onclick" onclick="box_click()">Кнопка</button>
        <script type="text/javascript">
      function box_click() {
          var node = document.getElementById("box");
          if (window.getComputedStyle(node).getPropertyValue('display') == 'none') {
              node.style.display = 'inline';
          } else {
              node.style.display = 'none';
          };
      }
        </script>
Ответить с цитированием
  #3 (permalink)  
Старый 09.04.2018, 13:24
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Nexus,
Спасибо, все хорошо работает
Ответить с цитированием
  #4 (permalink)  
Старый 09.04.2018, 14:01
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Дополнительный вопрос
Если я добавлю в условие чтобы box скрывался через 8 секунд, как это адекватно прописать? Например если напишут так, то кнопка будет скрываться, а условие setInterval не будет обнуляться, при последующих нажатиях будет срабатываеть предыдущие таймеры на скрытие, clearInterval возможно неправильно привязан:
<style type="text/css">
            #box{display: none}
</style>
    <body>
        <div id="date"></div>
        <div id="box">Вот</div>
        <button id="onclick" onclick="box_click()">Кнопка</button>
        <script type="text/javascript">
      function box_click() {
          var node = document.getElementById("box");
          if (window.getComputedStyle(node).getPropertyValue('display') == 'none') {
              node.style.display = 'inline';
              var id = setTimeout(function() {node.style.display = 'none';}, 8000);
          } else {
              node.style.display = 'none';
              clearInterval(id);
          };
      }
        </script>
Ответить с цитированием
  #5 (permalink)  
Старый 09.04.2018, 14:05
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,733

Artur_Hopf,
var id = 0;

function box_click() {
    clearTimeout(id);
    var node = document.getElementById("box");
    if (window.getComputedStyle(node).getPropertyValue('display') == 'none') {
        node.style.display = 'inline';
        id = setTimeout(function() {
            node.style.display = 'none';
        }, 8000);
    } else {
        node.style.display = 'none';

    };
}
Ответить с цитированием
  #6 (permalink)  
Старый 09.04.2018, 14:38
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Nexus,
Спасибо
Ответить с цитированием
  #7 (permalink)  
Старый 09.04.2018, 15:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072


решение подобных задач: начинают проверку не с === , а !== изначально отсутствующему значению, в данном случае 'inline'!!!
вариант если элемент изначально скрыт
<meta charset="utf-8">
<style type="text/css">
                        #box{display: none}
</style>
        <body>
                <div id="date"></div>
                <div id="box">Вот</div>
                <button id="onclick" onclick="box_click()">Кнопка</button>
                <script type="text/javascript">
            function box_click() {
                    var style = document.getElementById("box").style;
                    if (style.display  != 'inline') {
                            style.display = 'inline';
                    } else {
                            style.display = 'none';
                    };
            }
                </script>
        </body>


вариант если элемент изначально открыт
<meta charset="utf-8">
<style type="text/css">
                        #box{display: inline}
</style>
        <body>
                <div id="date"></div>
                <div id="box">Вот</div>
                <button id="onclick" onclick="box_click()">Кнопка</button>
                <script type="text/javascript">
            function box_click() {
                    var style = document.getElementById("box").style;
                    if (style.display  != 'none') {
                            style.display = 'none';
                    } else {
                            style.display = 'inline';
                    };
            }
                </script>
        </body>

Последний раз редактировалось рони, 09.04.2018 в 15:52.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
имитация клика dragos jQuery 1 29.08.2016 07:18
имитация клика dragos Events/DOM/Window 0 28.08.2016 19:09
Передача фона без клика yyyyuriyyyy AJAX и COMET 7 03.04.2014 13:37
Функция в функции. Обработчики клика. Запутался =) DorianLeroy Общие вопросы Javascript 8 29.09.2011 16:17
Получение координат клика мыши uonax Events/DOM/Window 3 20.06.2010 09:32