#jquery #toggle
#jquery #переключить
Вопрос:
Я создал фильтр для небольшого рабочего проекта, и последняя ошибка, которую мне нужно решить, — это проблема со скрытием / отображением. Когда я показываю часть аннотации, щелкая заголовок и используя кнопку позже, кнопка показывает все аннотации, но она не скроет их все при втором щелчке. Знаете ли вы, как изменить код, чтобы он работал правильно? Заранее благодарю вас!
/* toggle button all anotation*/
$('#makeVisible').on('click', function () {
$(this).text($(this).text() == 'Show' ? 'Show' : 'Hide');
$(".anotace").toggleClass("hide");
$(".anotace").toggleClass("show");
});
/*toggle one anotation to click its header */
$('.nazev').click(function(){
$(this).next(".anotace").slideToggle();
})
.anotace {
display: none;
}
.hide {
display: none;
}
.show {
display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<button id='makeVisible'> Show </button>
<div class='beseda'>
<div class="nazev">Lorem</div>
<div class="anotace">Ipsum </div>
</div>
<div class='beseda'>
<div class="nazev">Lorem</div>
<div class="anotace">Ipsum</div>
</div>
<div class='beseda'>
<div class="nazev">Lorem</div>
<div class="anotace">Ipsum</div>
</div>
Комментарии:
1. Он правильно скрывает все три аннотации ‘Ipsum’ в моем браузере, как я думаю, так и должно быть. Аннотации ‘Lorem’ не скрыты (если вы это имели в виду), поскольку вы только переключаете
show
/hide
classes на аннотации сanotace
помощью класса. Кстати, я предлагаю использовать толькоshow
либоhide
класс, либо класс. Итак: убедитесь, что ваши аннотации видны по умолчанию, и заставьтеhide
класс переопределить это или наоборот.
Ответ №1:
Вы можете попробовать что-то вроде этого:
$('#makeVisible').on('click', function() {
var s = $(this).text() != 'Show'
$(this).text(s ? 'Show' : 'Hide');
if(s)
$(".anotace:visible").slideToggle("show");
else
$(".anotace:not(:visible)").slideToggle("hide");
});
Это покажет / скроет только те, которые не показаны / скрыты.
Итак, если вы нажмете на 1 из кнопок Lorem
and then Show
, то остальные 2 будут переключаться.
ДЕМОНСТРАЦИЯ
/* toggle button all anotation*/
$('#makeVisible').on('click', function() {
var s = $(this).text() != 'Show'
$(this).text(s ? 'Show' : 'Hide');
if(s)
$(".anotace:visible").slideToggle("show");
else
$(".anotace:not(:visible)").slideToggle("hide");
});
/*toggle one anotation to click its header */
$('.nazev').click(function() {
$(this).next(".anotace").slideToggle();
})
.anotace {
display: none;
}
.hide {
display: none;
}
.show {
display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<button id='makeVisible'>Show</button>
<div class='beseda'>
<div class="nazev">Lorem</div>
<div class="anotace">Ipsum </div>
</div>
<div class='beseda'>
<div class="nazev">Lorem</div>
<div class="anotace">Ipsum</div>
</div>
<div class='beseda'>
<div class="nazev">Lorem</div>
<div class="anotace">Ipsum</div>
</div>
Комментарии:
1. Это будет работать отлично! Спасибо за ответ!