Jump to content
  • 0

Появление блока


Hoax
 Share

Question

Всем привет, вот сделал такую штуку

При клике на #qwer появляется другой блок, код работает, вот только как сделать так чтобы он работал постоянно? Т.е. при клике на один блок, появляется другой, а потом при 2-ом клике он исчезает, но при последующих кликах ничего не происходит.



<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<style>
#qwer {width:300px;height:300px;background:#b3b3b3;cursor:pointer;}
#ok {width:300px;height:300px;background:#b3b3b3;display:none;}

</style>
</head>
<body>

<div id="qwer"><p>нажми</p>


</div>

<div id="ok">ergreg</div>

<script>


var div = document.getElementById('qwer');
var p = div.getElementsByTagName('p')

var divHide = document.getElementById('ok');
div.onclick = function() {

if (p) {

divHide.style.display = divHide.style.display ? 'none' : 'block';

}


}

</script>


Link to comment
Share on other sites

16 answers to this question

Recommended Posts

  • 0

divHide.style.display = divHide.style.display ? 'none' : 'block';

divHide.style.display возвращает:

1 раз - "" что воспринимается как false и блок получает display:block

2 раз - "block" что условием воспринимается как true и блок получает display:none

3 раз и все последующие клики возвращается строка - значит true

значит сравнение должно выглядеть так:

divHide.style.display = divHide.style.display=="block" ? 'none' : 'block';

Edited by wwt
  • Like 1
Link to comment
Share on other sites

  • 0

Работает! Но данный код я подстроил под себя...(

Не очень понимаю работу оператора "?", —- раз верно условие, выполняется значение1(true), если нет - значение2(false).

Но что именно обозначает "=" присвоение или что?

Если объясните буду очень благодарен.

Link to comment
Share on other sites

  • 0

Работает! Но данный код я подстроил под себя...(

Не очень понимаю работу оператора "?", —- раз верно условие, выполняется значение1(true), если нет - значение2(false).

Но что именно обозначает "=" присвоение или что?

Если объясните буду очень благодарен.

divHide.style.display = divHide.style.display=="block" ? 'none' : 'block';

Это тернарная условная операция

логическое выражение ? выражение 1 : выражение 2

тоже самое можно написать так( чтоб понятно было):


if(divHide.style.display == "block"){
divHide.style.display = 'none';
}else{
divHide.style.display = 'block';
}

  • Like 1
Link to comment
Share on other sites

  • 0

Работает! Но данный код я подстроил под себя...(

Не очень понимаю работу оператора "?", —- раз верно условие, выполняется значение1(true), если нет - значение2(false).

Но что именно обозначает "=" присвоение или что?

Если объясните буду очень благодарен.

divHide.style.display = divHide.style.display=="block" ? 'none' : 'block';

Это тернарная условная операция

логическое выражение ? выражение 1 : выражение 2

тоже самое можно написать так( чтоб понятно было):


if(divHide.style.display == "block"){
divHide.style.display = 'none';
}else{
divHide.style.display = 'block';
}

А почему тогда нельзя написать вот так


divHide.style.display=="block" ? 'none' : 'block';

Так же есть условие, и два значения

Link to comment
Share on other sites

  • 0

Работает! Но данный код я подстроил под себя...(

Не очень понимаю работу оператора "?", —- раз верно условие, выполняется значение1(true), если нет - значение2(false).

Но что именно обозначает "=" присвоение или что?

Если объясните буду очень благодарен.

divHide.style.display = divHide.style.display=="block" ? 'none' : 'block';

Это тернарная условная операция

логическое выражение ? выражение 1 : выражение 2

тоже самое можно написать так( чтоб понятно было):


if(divHide.style.display == "block"){
divHide.style.display = 'none';
}else{
divHide.style.display = 'block';
}

А почему тогда нельзя написать вот так


divHide.style.display=="block" ? 'none' : 'block';

Так же есть условие, и два значения

да условие есть, два значения есть )) просто так чтоли? ))а где обьект/переменная/итд которому эти значения присваиваются? ))

можно еще так если уж совсем не понятно:


divHide.style.display=="block" ? divHide.style.display = 'none' : divHide.style.display = 'block';

  • Like 1
Link to comment
Share on other sites

  • 0

Спс, последнее понятно , а так же через if тоже, просто как-то не очень привычно писать 2 условия через "="

Через = не условие, а присваивание.С помощью него мы придаем значение нашему блоку либо none либо block

Edited by wwt
Link to comment
Share on other sites

  • 0

Все бы хорошо, НО в стилях указано что блок изначально display:none;

т.е. выражение

divHide.style.display = divHide.style.display=="block" ? 'none' : 'block';

я читаю так, *Если diHide имеет display == block, то он становится none, иначе block"

тогда почему вот этот код не работает

divHide.style.display = divHide.style.display=="none" ? 'block' : 'none';

- ведь он фактически тоже самое, только 1 значение подходит, а не второе.

Edited by Hoax
Link to comment
Share on other sites

  • 0

Пока свойство display не задано скриптом, divHide.style.display возвращает пустую строку, поэтому при первом клике возвращается именно она, но только при первом, после того как вы присвоили "none" будет возвращаться строка "none"

Если уж совсем хочется без сравнения, то и присваивать нужно не "none", а ""

divHide.style.display = divHide.style.display ? "" : "block";

Edited by wwt
Link to comment
Share on other sites

  • 0

Ну и ласт вопрос =) вот в данном коде http://learn.javascript.ru/play/tutorial/browser/events/selectable-list.html

Данный код прелогает


if (!e.shiftKey) {
deselectAllItems(ul);
}

То, что если был клик не с шифтом (т.е. обычный клик), выполняется ф-я deselectAllItems(ul) . Которая удаляет все классы при клике на <li>, удяляет она да, все кроме одного <li> на которого кликнули, как так?

Link to comment
Share on other sites

  • 0

Ну и ласт вопрос =) вот в данном коде http://learn.javascript.ru/play/tutorial/browser/events/selectable-list.html

Данный код прелогает


if (!e.shiftKey) {
deselectAllItems(ul);
}

То, что если был клик не с шифтом (т.е. обычный клик), выполняется ф-я deselectAllItems(ul) . Которая удаляет все классы при клике на <li>, удяляет она да, все кроме одного <li> на которого кликнули, как так?

Смотрите дальше , там следующий код


...
toggleSelectItem(target);
...

собственно вызов функции с передачей ей елемента на который кликнули:

функция выглядит так:

function toggleSelectItem(li) {
li.className = (li.className == '') ? 'selected' : '';
}

=) то есть опять в тернарном условном операторе присваивается класс selected li по которому кликнули

Edited by wwt
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy