Всем хорошего настроения в этот прежденочной вечер.. Вопрос собственно вот в чём..: Есть меню на сайте, подпункты должны отображаться исключительно при клике, а не при наведении, но это уже реализовано с помощью toggle.. Но возникла проблема в том, что когда при клике на один пункт меню, подпункты отображаются, затем при клике на другой пункт меню, всё опять же здорово отображается, но если же мы второй раз кликнем по тому же первому пункту меню, он не откроется, так как на нём еще висит событие toggle и просто на просто он выполняет закрытие и по этому приходится кликать 2 раза.. что для пользователя будет не очень понятно.. Возможно ли как то это решить? Или может у jquery есть альтернативы? Думал о аккордине, но понятия пока слегка не представляю как аккордин внедрить в горизонтальное меню. Ах да, для простоты понимания, можете сами попробовать по кликать по менюшке, это на сайте - allTula.ru .. Тут верхние 4 пункта пока.. "Вся Тула", "Новости", "Объявления", "Полезное". И вот, если кликнуть сначала по "Вся Тула", а потом по "Новости", то отобразится быстро, но если же опять кликнуть на "Вся Тула", то подпункты отобразятся после 2 клика.. Надеюсь поняли о чём я.. Так же вот.. прилагаю код скрипта..: jQuery('a.domnili').toggle(function(){ jQuery('a.domnili + ul').hide(); jQuery(this).next('ul').slideToggle( "slow", function() { // Animation complete. }); },function(){ jQuery(this).next('ul').fadeOut(111);
}); P.S. Извините, если много читать, но благодарен, если потратите время и на прочтение.
Просто используй обычный click и флаг. Т.е. если кликаем по Новостям - смотрим чему равен флаг, если 1 - то закрываем, если 0 - то открываем. А когда кликаем, например, по объявлениям - проставляем у всех других элементов флаг равным 0.
berida, Благодарю, выручил, почему - то тупил с этим весь день, но всё таки сделал! Сначала гуглил, гугл меня выкидывал на.. jQuery.Callbacks() .. Всё не мог понять как связано это с флагами.. Но благо код вышел такой (Может потребуется кому..): ---------------------------- var flags=0; //Или можно просто flag.. jQuery('a.double_click').click(function(nohref){ //nohref - чтобы не было перехода по ссылке.. if (flags==0){ jQuery('a.double_click').addClass('hide'); jQuery('a.double_click').removeClass('show'); jQuery(this).addClass('show'); flag=1; } else { jQuery('a.double_click').removeClass('show'); jQuery(this).addClass('show'); flags=0; } nohref.preventDefault(); //nohref - чтобы не было перехода по ссылке.. var hhref=jQuery(this).attr('href'); //В переменную hhref добавим значение параметра href у ссылки.. jQuery(this).dblclick(function() { //ПРИ ДВОЙНОМ КЛИКЕ.. location.href=hhref; //..ПЕРЕХОД ПО ССЫЛКЕ.. }); });
Кроме того, крайне рекомендую учиться давать осмысленные имена переменным. Претензия к nohref, это в Вашем понимании это отмена перехода, вообще это экземпляр события.