2013-11-20 2 views
2

У меня есть этот код jQuery, который открывает аккордеон при наведении, но мне нужно заставить его работать каждую вкладку на клике вместо этого, я попытался изменить «зависание» на «щелчок», но без успеха , может кто-то здесь, пожалуйста, помогите мне?JQuery на клик вместо зависания

Заранее спасибо.

$(function() { 
    $('#accordion > li').hover(function() { 
     var $this = $(this); 
     $this.stop().animate({'width':'480px'},500); 
     $('.heading',$this).stop(true,true).fadeOut(); 
     $('.bgDescription',$this).stop(true,true).slideDown(500); 
     $('.description',$this).stop(true,true).fadeIn(); 
    }, function() { 
     var $this = $(this); 
     $this.stop().animate({'width':'115px'},1000); 
     $('.heading',$this).stop(true,true).fadeIn(); 
     $('.description',$this).stop(true,true).fadeOut(500); 
     $('.bgDescription',$this).stop(true,true).slideUp(700); 
    }); 
}); 

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

я сделать скрипка со всем кодом.

http://jsfiddle.net/C8Kp8/ < - решение Tushar Гупты

< http://jsfiddle.net/SHmuc/ - Оригинальный код

поблагодарить всех вас за вашу помощь, его действительно ценят.

+0

можно создать jsfiddle для лучшего понимания ... ?? –

+0

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

ответ

0

Посмотрите на это. @ Ответ Алекс хорош, но игнорирует первый щелчок и не закрывает открытые элементы при нажатии закрытого элемента. FIDDLE. В этой версии также работают ссылки more в элементах аккордеона.

$(function() { 
    $('#accordion li').click(function() { 
     var $this = $(this); 

     if (!$this.hasClass('open')) { 
      // open clicked accordion element 
      $this.stop().animate({'width':'480px'},500); 
      $('.heading',$this).stop(true,true).fadeOut(); 
      $('.bgDescription',$this).stop(true,true).slideDown(500); 
      $('.description',$this).stop(true,true).fadeIn(); 

      // close other open accordion element 
      $("#accordion li.open").stop().animate({'width':'115px'},1000); 
      $("#accordion li.open .heading").stop(true, true).fadeIn(); 
      $("#accordion li.open .description, #accordion li.open .bgDescription").stop(true, true).fadeOut(); 
      $("#accordion li.open").removeClass("open"); 
      $this.addClass('open'); 
     } 
     else { 
      // close this accordion element 
      $this.stop().animate({'width':'115px'},1000); 
      $('.heading',$this).stop(true,true).fadeIn(); 
      $('.description',$this).stop(true,true).fadeOut(500); 
      $('.bgDescription',$this).stop(true,true).slideUp(700); 
      $this.removeClass('open'); 
     } 
    }); 

    $('#accordion > li a').click(function(e){ 
     e.stopPropagation(); 
    }); 
}); 
+0

Это прекрасно работает, большое вам спасибо за вашу помощь и время, которое вы приняли, чтобы помочь мне. – user3012839

1

Вы можете использовать .toggle() или это

$(function() { 
    $('#accordion > li').click(function() { 
     var $this = $(this); 

     if ($this.hasClass('open')) { 
      $this.stop().animate({'width':'480px'},500); 
      $('.heading',$this).stop(true,true).fadeOut(); 
      $('.bgDescription',$this).stop(true,true).slideDown(500); 
      $('.description',$this).stop(true,true).fadeIn(); 
      $this.removeClass('open'); 
     } 
     else { 
      $this.stop().animate({'width':'115px'},1000); 
      $('.heading',$this).stop(true,true).fadeIn(); 
      $('.description',$this).stop(true,true).fadeOut(500); 
      $('.bgDescription',$this).stop(true,true).slideUp(700); 
      $this.addClass('open'); 
     } 
    }); 
}); 
+0

. Вы имеете в виду вместо этого событие toggle: http://api.jquery.com/toggle-event/ в любом случае, это было удалено из jquery –

+0

Я не имею в виду событие, я имею в виду http://api.jquery.com/toggle/ – Alex

+0

Мой плохой, я использую toggle вместо анимации с помощью fade/slide, извините –

Смежные вопросы