Есть меню аккордеон, в котором все разделы скрыты. При нажатии на заголовок они открываются. Как доделать так, чтобы 1 раздел был всегда открыт, но при нажатии тоже закрывался?
JS:
(function($) {
var allPanels = $('.accordion > dd').hide();
$('.accordion > dt > a').click(function() {
allPanels.slideUp();
$(this).parent().next().slideDown();
return false;
});
})(jQuery);
HTML:
<dl class="accordion">
<dt>
<a href="javascript:void(0);">Настройка элементов</a>
</dt>
<dd>
<p>1</p>
<p>2</p>
<p>3</p>
</dd>
<dt>
<a href="javascript:void(0);">Настройка текста</a>
</dt>
<dd>3</dd>
<dt>
<a href="javascript:void(0);">Настройка текста</a>
</dt>
<dd>4</dd>
</dl>
Полный пример в fiddle.
Как простой вариант, можно проверять, виден ли блок. Если при клике блок не был виден, то показывать его:
jQuery(document).ready(function($) {
var allPanels = $('.accordion > dd').hide();
$('.accordion > dt > a').on("click", function() {
var $block = $(this).parent().next();
var visible = $block.is(':visible');
allPanels.slideUp();
if (!visible) {
$block.slideDown();
}
return false;
});
});
.accordion {
font: 16px Sans-Serif;
box-shadow:0px 0px 10px rgba(0, 0, 0, 0.5);
border-radius:11px;
margin-top:0;
}
* .accordion dt, .accordion dd {
padding: 10px;
/*border: 1px solid black;*/
border-bottom: 0;
}
.accordion dd {
margin-left: 0;
}
.accordion dt:last-of-type, .accordion dd:last-of-type {
/* border-bottom: 3px solid black;*/
}
.accordion dt a, .accordion dd a {
display: block;
color: black;
font-weight: bold;
}
.accordion dd {
border-top: 0;
font-size: 12px;
}
.accordion dd:last-of-type {
border-top: 1px solid white;
position: relative;
top: -1px;
}
<dl class="accordion">
<dt>
<a href="">Настройка элементов</a>
</dt>
<dd>
<p>1</p>
<p>2</p>
<p>3</p>
</dd>
<dt>
<a href="">Настройка текста</a>
</dt>
<dd>3</dd>
<dt>
<a href="">Настройка текста</a>
</dt>
<dd>4</dd>
</dl>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Если фраза "чтобы 1 раздел был всегда открыт" означает "первый раздел", а не "один раздел", то так:
(function ($) {
var allPanels = $('.accordion > dd').hide();
$('.accordion > dt > a').click(function () {
allPanels.slideUp();
$(this).parent().next().slideDown();
return false;
});
})(jQuery);
$('.accordion > dd').first().show(); //магия
(function ($) {
var allPanels = $('.accordion > dd:not(:eq(0))').hide();
$('.accordion > dt > a').click(function () {
allPanels.not(this).slideUp();
$(this).parent().next().stop().slideToggle();
return false;
});
})(jQuery);
И "javascript:void(0);" - там абсолютно не нужен
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Предположим, что существует форма, содержащая поле для загрузки файлов: <input type='file'>Есть ли возможность написать такой скрипт, чтобы при...
Есть в теме wordpress подключенный скрипт соц сетей addthis (изменил стандартный id на pubid=ra-559fd5ab72c4dfba, но это ничего мне не дало)