Jump to content
  • 0

Глючит аккордеон


Mila
 Share

Question

Почему то глючит аккордеон - при нажатии на <span class="parent">текст</span> открывается блок.

При нажатии на следующий елемент <span class="parent">текст</span> - блок открывается, при этом первый открытый блок должен закрываться, а он остается открытым.

Причем возникает этот глюк при использовании:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

При использовании версии 1.2.6 все работает нормально.

Вот код:

JSCRIPT:


$(document).ready(function(){
$(".accordion .parent:first").addClass("active");
$(".accordion .children:not(:first)").hide();
$(".accordion .parent").click(function(){
$(this).next(".children").slideToggle("slow")
.siblings(".children:visible").slideUp("slow");
$(this).toggleClass("active");
$(this).siblings(".parent").removeClass("active");
});
});

HTML:


<ul class="accordion">
<li><span class="parent active">Авто и Мото </span>
<ul style="display: none;" class="children">
<li><a href="">Перевозки</a></li>
<li><a href="">Ремонт, запчасти</a></li>
<li><a href="">Тюнинг</a></li>
</ul>
</li>
<li><span class="parent"> Дом и семья </span>
<ul style="display: none;" class="children">
<li><a href="">Мебель</a></li>
<li><a href="">Сад и огород</a></li>
<li><a href="">Дом и коттедж</a></li>
</ul>
</li>
<li><span class="parent active">Интернет</span>
<ul style="display: none;" class="children">
<li><a href="">Провайдеры</a></li>
<li><a href="">Работа в сети</a></li>
<li><a href="">Интересное</a></li>
</ul>
</li>
</ul>

Помогите, пожалуйста, исправить это.

Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

глючит, так как тут:

$(this).next(".children").slideToggle("slow") // следующий .children после элемента по которому кликнули

.siblings(".children:visible").slideUp("slow"); // а это опять тот же .children что и первый раз, так как .siblings ловит "братьев, сестер". Тоесть $(this).siblings(".children:visible") - видимые элементы с классом children, которые имеют общего родителя с $(this), тоесть с тем элементом по которому кликали. Общий родитель - лишка.

я бы так вот делал:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>open/close</title>
<style>
.parent.active { color: #f00; }
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"> </script>
<script type="text/javascript">
$(document).ready(function(){
$('.accordion').each(function(){
var el = $('>li',this),
slide = $('.children',this),
opener = $('.parent',this);

el.each(function(i){
var elOpener = $('.parent',this),
elSlide = $('.children',this);

if(i == 0) elOpener.addClass('active');
else elSlide.hide();

elOpener.click(function(){
slide.not(elSlide).slideUp('slow');
opener.not(elOpener).removeClass('active');
elSlide.slideDown('slow');
elOpener.addClass('active');
})
})
})
});
</script>
</head>
<body>
<ul class="accordion">
<li><span class="parent">Авто и Мото </span>
<ul class="children">
<li><a href="">Перевозки</a></li>
<li><a href="">Ремонт, запчасти</a></li>
<li><a href="">Тюнинг</a></li>
</ul>
</li>
<li><span class="parent"> Дом и семья </span>
<ul class="children">
<li><a href="">Мебель</a></li>
<li><a href="">Сад и огород</a></li>
<li><a href="">Дом и коттедж</a></li>
</ul>
</li>
<li><span class="parent">Интернет</span>
<ul class="children">
<li><a href="">Провайдеры</a></li>
<li><a href="">Работа в сети</a></li>
<li><a href="">Интересное</a></li>
</ul>
</li>
</ul>
</body>
</html>

P.S. Странно что у человека зарегистрированного на этом форуме (наверное чего-то хочет изучить в верстке, или уже изучил) слово аккордион вызвало истерику. Чего со слова "меню" не смеетесь, и не ассоциируете его с рестораном?

  • Like 1
Link to comment
Share on other sites

  • 0

P.S. Странно что у человека зарегистрированного на этом форуме (наверное чего-то хочет изучить в верстке, или уже изучил) слово аккордион вызвало истерику. Чего со слова "меню" не смеетесь, и не ассоциируете его с рестораном?

+1. Тоже кстати юмора вообще не увидел.

Link to comment
Share on other sites

  • 0

mishka, спасибо за помощь - теперь работает отлично.

Единственное, что хотелось бы добавить, возможность закрытия блока по клике на нем.

А то один блок всегда остается открытым.

Это возможно?

Edited by Mila
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