Изменить фоновое изображение при переключении меню аккордеона

У меня есть аккордеонное меню, и в каждом заголовке меню есть небольшая стрелка img, которая меняется, когда меню скользит вниз и вверх.

Это код до сих пор:

    $(document).ready(function() {
    $("div.menu_body").hide();
    $("#menuheader div.menu_head div.detailsPanel").toggle(function() {
      $(this).addClass("detailsPanelSelected").parent(this).next("div.menu_body").slideToggle(300).siblings("div.menu_body").slideUp("slow");
    },
      function() {

 $(this).removeClass("detailsPanelSelected").parent(this).next("div.menu_body").slideUp("slow");
      }
    );

Это отлично работает, когда я переключаю один пункт меню за раз.

Но скажем, я раскрываю один пункт меню и нажимаю на другой заголовок меню. Что происходит, так это то, что первый пункт меню скользит вверх, а вновь щелкнутый скользит вниз, как и ожидалось. Но стрелка gif не меняется обратно в меню, которое скользит вверх. Это происходит потому, что функция переключения все еще находится в первом состоянии, и если я снова нажму на нее, удалив, таким образом, класс «detailsPanelSelected», все, что произойдет, это то, что изображение изменится обратно. Глядя на код, это ожидаемо.

Итак, мой вопрос: как мне сделать так, чтобы пункты меню «detailsPanelSelected» удалялись при нажатии другого заголовка меню? Могу ли я как-то сбросить ожидающую функцию переключения?


person Soeren    schedule 07.05.2009    source источник


Ответы (2)


попробуйте что-то вроде этого:

$("#menuheader div.menu_head div.detailsPanel").toggle(function() {

$(".detailsPanelSelected").each(function(i){ this.removeClass("detailPanelSelected"); })

$(this).addClass("detailsPanelSelected").parent(this).next("div.menu_body").slideToggle(300).siblings("div.menu_body").slideUp("slow");

}

важная часть кода такова:

$(".detailsPanelSelected").each(function(i){ this.removeClass("detailPanelSelected"); })

он должен быть размещен над кодом, в котором вы добавляете класс, который меняет направление стрелки... поэтому все элементы возвращаются в свое закрытое состояние, тогда ваша следующая функция "открывает" правильный

person jhensley    schedule 07.05.2009
comment
Это не работает. Что он делает, так это то, что он открывает тело меню, а затем вам нужно снова закрыть его, прежде чем вы сможете открыть любое другое тело меню. Однако изображение стрелки меняется. Когда тело меню скользит вниз, div menu_body получает атрибут display:block. Это может быть способом определения последнего открытого тела меню. Мне нужно манипулировать последними открытыми пунктами меню со стрелкой img, независимо от того, какой из других пунктов меню щелкнут. Мне пока не везло... - person Soeren; 08.05.2009
comment
Это html для пункта меню: ‹div id=menuheader class=menu_list› ‹div class=menu_head› ‹img class=Pic alt=Some Picture src=Some Picture.jpg /› ‹div class=detailsPanel› ‹span class =font1›Некоторый текст‹/span› ‹/div› ‹div class=TestDiv› ‹span class=font1›Некоторый текст‹/span› ‹/div› ‹/div› ‹div class=menu_body› ‹div class=body_divs_container › ..... ..... ..... ..... ‹/дел› ‹/дел› ‹/дел› - person Soeren; 08.05.2009
comment
Хм, не так много вариантов оставить код в поле для комментариев, да? - person Soeren; 08.05.2009
comment
правильно ли установлен значок меню ТОЛЬКО для выбранного пункта меню? - person jhensley; 08.05.2009
comment
Да, это фоновое изображение в ‹div class=detailsPanel›‹/div› Класс detailspanel имеет фоновое изображение с закрытой стрелкой, а класс detailsPanelSelected, который добавляется в div при нажатии, устанавливает изображение с открытой стрелкой. - person Soeren; 09.05.2009

звучит так, как будто вы могли бы использовать Slidorion. Это комбинация слайдера изображений и аккордеона. посмотрите, может пригодится:

http://www.slidorion.com

person hollandben    schedule 26.10.2011