Задать вопрос
@khalel2

Когда нажимаю на ссылку, аккордеон закрывается полностью. Как настроить JQuery код так чтобы можно было переходить по ссылкам в аккордеоне?

<ul class="accordion-list">
	<li>
		<h3>Покупателям</h3>
		<div class="answer" style="width: 80%;">
			<a href="https://www.youtube.com">График работы магазинов</a>
			<a href="https://www.youtube.com">Доставка</a>
			<a href="https://www.youtube.com">Оплата</a>
			<a href="https://www.youtube.com">Возврат товара</a>
			<a href="https://www.youtube.com">Контакты</a>
			<a href="https://www.youtube.com">Магазины</a>
			<a href="https://www.youtube.com">Вопросы и ответы</a>
			<a href="https://www.youtube.com">Договор публичной оферты</a>
		</div>
    </li>

	<li>
		<h3>Сервисы</h3>
		<div class="answer" style="width: 80%;">
			<a href="https://www.youtube.com">Подарочные сертификаты </a>
			<a href="https://www.youtube.com">Бонусные карты</a>
		</div>
	</li>
	<li>
		<h3>Корпоративный блок</h3>
		<div class="answer" style="width: 80%;">
			<a href="https://www.youtube.com">Контакты для прессы</a>
			<a href="https://www.youtube.com">Социальная ответственность</a>
			<a href="https://www.youtube.com">Аренда помещений</a>
			<a href="https://www.youtube.com">Оптовым покупателям (b2b)</a>
		</div>
	</li>
</ul>


.accordion-list {
	  font-family: 'Roboto', sans-serif;
	  padding: 20px;
	  margin: 0;
	  list-style: none;
	  background-color: #FFF; }	
.accordion-list li {
	    box-sizing: border-box;
	    position: relative;
	    display: block;
	    width: 100%;
	    height: auto;
	    background-color: #FFF;
	    padding: 15px;
	    margin: 0 auto 0px auto;
	    border-bottom: 1px solid #D2D2D7;
	    cursor: pointer; }
.accordion-list li.active {
      padding-bottom: 0px; }
      .accordion-list li.active h3:after {
        transform: rotate(45deg); }
.accordion-list li h3 {
      font-weight: 500;
      color: #424245;
      position: relative;
      display: block;
      width: 100%;
      height: auto;
      padding: 0 0 0 0;
      margin: 0;
      font-size: 12px;
      letter-spacing: 0.01em;
      cursor: pointer; }
.accordion-list li h3:after {
        content: "+";
        font-family: "material-design-iconic-font";
        position: absolute;
        right: 0;
        top: -3px;
        color: #6E6E73;
        transition: all 0.3s ease-in-out;
        font-size: 18px; }
.accordion-list li div.answer {
      position: relative;
      display: block;
      width: 100%;
      height: auto;
      margin: 0;
      padding: 20px;
      cursor: pointer; }
.accordion-list li div.answer a {
        text-decoration: none;
        position: relative;
        display: block;
        font-weight: 300;
        padding: 10px 0 0 0;
        cursor: pointer;
        line-height: 24px;
        margin: 0 0 0 0;
        font-size: 12px;
        color: #636367; }


$(document).ready(function(){
			$('.accordion-list > li > .answer').hide();
			$('.accordion-list > li').click(function() {
				if ($(this).hasClass("active")) {
					$(this).removeClass("active").find(".answer").slideUp();
				} else {
					$(".accordion-list > li.active .answer").slideUp();
					$(".accordion-list > li.active").removeClass("active");
					$(this).addClass("active").find(".answer").slideDown();
				}
				return false;
			});
			});
  • Вопрос задан
  • 121 просмотр
Подписаться 1 Сложный 3 комментария
Решения вопроса 2
DanielTonne
@DanielTonne
Это происходит из-за того, что обработчик клика висит на теге li, в котором и находится весь ваш контент. Следовательно, когда вы нажимаете на ссылку, вы нажимаете и на элемент li и у Вас запускается обработчик.

https://codepen.io/soffrire/pen/RwjXKNZ
Ответ написан
Комментировать
zkrvndm
@zkrvndm
Архитектор решений
Ну так убедись сначала, что клик идет не по ссылке и только тогда применяй изменения:
$(document).ready(function(){
	$('.accordion-list > li > .answer').hide();
	$('.accordion-list > li').click(function() {
		if (event.target.tagName != 'A') {
			if ($(this).hasClass('active')) {
				$(this).removeClass('active').find('.answer').slideUp();
			} else {
				$('.accordion-list > li.active .answer').slideUp();
				$('.accordion-list > li.active').removeClass('active');
				$(this).addClass('active').find('.answer').slideDown();
			}
			return false;
		}
	});
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Everybody_Lies
$('.accordion-list > li > .answer a').click(function(e){
    e.stopPropagation();
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
06 дек. 2024, в 05:29
20000 руб./за проект
06 дек. 2024, в 03:58
10000 руб./за проект
06 дек. 2024, в 02:20
5000 руб./за проект