На данный вопрос уже ответили:
FAQ из 13 вопросов, все ответы скрыты. При клике на вопрос должен открываться ответ на него, а все остальные ответы (если есть открытые) должны закрыться. Повторный клик по вопросу (открытому то есть) должен закрыть этот ответ. Замучился... Никак не получается сделать закрытие по повторному клику. В итоге, пока оставил так (всегда остаётся 1 открытый вопрос). Помогите, разобраться, я новичок. Желательно, чтобы было универсально, так как кол-во вопросов периодически меняется, что-то удаляется из середины списка, а что-то добавляется.
ul {
list-style-type: none;
margin-bottom: 20px;
font-size: 14pt !important;
text-align: justify;
}
.question {
padding: 5px 0;
}
.question span {
border-bottom: 1px dashed #537098;
padding: 0 1px;
cursor: pointer;
color: #537098;
}
#answer1, #answer2, #answer3, #answer4, #answer5, #answer6, #answer7, #answer8, #answer9, #answer10, #answer11, #answer12, #answer13 {
display: none;
margin-left: 20px;
padding: 10px 0 5px 10px;
}
li p {
padding: 5px;
font-size: 14pt !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<ul>
<li class="question" onclick="$('#answer1').slideDown(); $('#answer2, #answer3, #answer4, #answer5, #answer6, #answer7, #answer8, #answer9, #answer10, #answer11, #answer12, #answer13').slideUp();"><span>Вопрос 1</span></li>
<li id="answer1">Ответ 1</li>
<li class="question" onclick="$('#answer2').slideDown(); $('#answer1, #answer3, #answer4, #answer5, #answer6, #answer7, #answer8, #answer9, #answer10, #answer11, #answer12, #answer13').slideUp();"><span>Вопрос 2</span></li>
<li id="answer2">Ответ 2</li>
<li class="question" onclick="$('#answer3').slideDown(); $('#answer1, #answer2, #answer4, #answer5, #answer6, #answer7, #answer8, #answer9, #answer10, #answer11, #answer12, #answer13').slideUp();"><span>Вопрос 3</span></li>
<li id="answer3">Ответ 3</li>
<li class="question" onclick="$('#answer4').slideDown(); $('#answer1, #answer2, #answer3, #answer5, #answer6, #answer7, #answer8, #answer9, #answer10, #answer11, #answer12, #answer13').slideUp();"><span>Вопрос 4</span></li>
<li id="answer4">Ответ 4</li>
</ul>
У вас есть одна большая сущность - Вопрос
. Вопрос может иметь ответ, а может и не иметь. Начните с того, что используйте для одной сущности, один элемент списка. Не надо разделать вопрос и ответ в разные li
. Элементы списка обычно представляют однородные элементы, у вас то вопрос то ответ, логика ломается, смысла это не имеет, код и верстка усложняются.
Пусть ответ будет вложенным в li
, как и span
с вопросом
Далее, класс .question
вы сделали, почему бы не сделать класс .answer
? зачем эти #answer1
. Вы в css написали одно правило для кучу этих #answerХ
, должно быть очевидным, что надо сделать класс?
Не вставляйте js код прям внутрь html. забудьте про onclick
-атрибуты, так писали лет 15 назад.
$(".question span").click(function(){
var $a = $(this).next(".answer");
$(".answer").not($a).slideUp();
$a.slideToggle();
});
ul {
list-style-type: none;
margin-bottom: 20px;
font-size: 14pt !important;
text-align: justify;
}
.question {
padding: 5px 0;
}
.question span {
border-bottom: 1px dashed #537098;
padding: 0 1px;
cursor: pointer;
color: #537098;
}
.answer {
display: none;
margin-left: 20px;
padding: 10px 0 5px 10px;
}
li p {
padding: 5px;
font-size: 14pt !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<ul>
<li class="question">
<span>Вопрос 1</span>
<div class="answer">Ответ 1</div>
</li>
<li class="question">
<span>Вопрос 2</span>
<div class="answer">Ответ 2</div>
</li>
<li class="question">
<span>Вопрос 3</span>
<div class="answer">Ответ 3</div>
</li>
<li class="question" >
<span>Вопрос 4</span>
<div class="answer">Ответ 4</div>
</li>
</ul>
$(".questions-block").on('click', ".question", function (e) {
var $this = $(this)
if ($this.hasClass('open')) {
$this.removeClass('open').next().slideUp()
} else {
$this.closest(".questions-block").find(".question.open").next().slideUp()
$this.addClass('open').next().slideDown()
}
})
ul {
list-style-type: none;
margin-bottom: 20px;
font-size: 14pt;
text-align: justify;
}
.question {
padding: 5px 0;
}
.question span {
border-bottom: 1px dashed #537098;
padding: 0 1px;
cursor: pointer;
color: #537098;
}
.answer {
display: none;
margin-left: 20px;
padding: 10px 0 5px 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<ul class="questions-block">
<li class="question"><span>Вопрос 1</span></li>
<li id="answer1" class="answer">Ответ 1</li>
<li class="question"><span>Вопрос 2</span></li>
<li id="answer2" class="answer">Ответ 2</li>
<li class="question"><span>Вопрос 3</span></li>
<li id="answer3" class="answer">Ответ 3</li>
<li class="question"><span>Вопрос 4</span></li>
<li id="answer4" class="answer">Ответ 4</li>
</ul>
Если делать по вашей HTML разметке, то вот так:
ul {
list-style-type: none;
margin-bottom: 20px;
font-size: 14pt !important;
text-align: justify;
}
.question {
padding: 5px 0;
}
.question span {
border-bottom: 1px dashed #537098;
padding: 0 1px;
cursor: pointer;
color: #537098;
}
#answer1, #answer2, #answer3, #answer4, #answer5, #answer6, #answer7, #answer8, #answer9, #answer10, #answer11, #answer12, #answer13 {
display: none;
margin-left: 20px;
padding: 10px 0 5px 10px;
}
li p {
padding: 5px;
font-size: 14pt !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<ul>
<li class="question"><span>Вопрос 1</span></li>
<li id="answer1">Ответ 1</li>
<li class="question"><span>Вопрос 2</span></li>
<li id="answer2">Ответ 2</li>
<li class="question"><span>Вопрос 3</span></li>
<li id="answer3">Ответ 3</li>
<li class="question"><span>Вопрос 4</span></li>
<li id="answer4">Ответ 4</li>
</ul>
<script>
$('.question').each(function() {
$(this).on('click', function() {
$('.question').not($(this)).next().slideUp();
$(this).next().slideToggle(); //чтобы можно было скрыть при повторном нажатии
});
});
</script>
Виртуальный выделенный сервер (VDS) становится отличным выбором
У меня недавно появилась проблема, сайт некоторые элементы стал загружать после того как уже загрузилась страницаНапример, я захожу на яндекс...
Вопрос - есть определенные роуты, определенные с помощью стандартного метода роутинга AngularВ CanActivate я указываю свой guard
на сайте smartbalanceonline при отправке заказа
Из сервиса приходит json код с русскими именами ключейМожно ли их использовать в javascript или нужно обязательно преобразовывать и создавать соответствия...