Срабатывание клика
Добрый день, объясните пожалуйста, почему условие не срабатывает при первом клике? При последующих кликах все работает хорошо:blink:
<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>
|
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>
|
Nexus,
Спасибо, все хорошо работает :thanks: |
Дополнительный вопрос
Если я добавлю в условие чтобы 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>
|
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';
};
}
|
Nexus,
Спасибо :thanks: |
:write:
решение подобных задач: начинают проверку не с === , а !== изначально отсутствующему значению, в данном случае '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>
|
| Часовой пояс GMT +3, время: 12:39. |