jquery toggle + привязка и отвязка наведения

hey folks. having a bit of an issue using

 .toggle() 

На данный момент я могу успешно навести курсор на div и показать отдельный div, а затем навести курсор и скрыть его. Щелчок также работает, и он правильно отвязывает наведение.

Где у меня возникают проблемы, так это при «отмене клика», скрытии div и повторном включении наведения.

Вот код:

$('#song1').hover(
    function() { $('#song1_selected').fadeIn(); },
    function() { $('#song1_selected').fadeOut(); }   
  );

$('#song1').click(function() {
    $('#song1_selected').show();
    $("#song1").unbind('mouseenter mouseleave');
  });

любая помощь приветствуется!

спасибо, Мэтт


person Matt Nathanson    schedule 02.05.2011    source источник
comment
Когда следует скрыть div? Когда вы нажимаете где-нибудь еще сбоку?   -  person Felix Kling    schedule 02.05.2011
comment
div должен быть скрыт при каждом втором щелчке... 2,4 и т. д.   -  person Matt Nathanson    schedule 02.05.2011
comment
@MattNathanson: Что вы пробовали с toggle? Именно для этого предназначена функция.   -  person Felix Kling    schedule 02.05.2011
comment
да, вот где у меня проблемы с его реализацией... не могу заставить его работать! глупый я.   -  person Matt Nathanson    schedule 02.05.2011
comment
@MattNathanson: Да, но что именно не работает? Где ты застрял? В документации приведен пример: api.jquery.com/toggle-event   -  person Felix Kling    schedule 02.05.2011
comment
что ты имеешь в виду под анкликом? Вы имеете в виду mouseup или второй щелчок?   -  person Már Örlygsson    schedule 02.05.2011


Ответы (2)


Если вы динамически создаете элементы, .click() и все обычные обработчики не будут работать.

Вам нужно связать события, используя .live():

$('#song1').live('click', function() {
  ...
person Blender    schedule 02.05.2011
comment
@DavidHobs: я написал этот ответ за шесть месяцев до того, как был представлен .on(). - person Blender; 19.08.2012

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

$('#song1').hover(
    function() {
        if ( ! $(this).data('activesong') ) {
           $('#song1_selected').stop().fadeIn();
        }
    },
    function() {
       if ( ! $(this).data('activesong') ) {
           $('#song1_selected').stop().fadeOut();
       }
    }    
);

$('#song1').click(
    function() {
        var isActive = !$(this).data('activesong');
       $('#song1_selected').toggle(isActive);
       $("#song1").data('activesong', isActive);
   }
);

пример на http://jsfiddle.net/gaby/qTprn/

person Gabriele Petrioli    schedule 02.05.2011