2013-06-12 37 views
0

找出如何重新启用事件处理程序有点麻烦。JQuery - 关闭事件处理程序然后返回

我试图在动画结束之前停止执行多次函数。

这里有一个小提琴:

http://jsfiddle.net/MkmnW/1/

这里是我的代码:

$("#buttons a").click(function() { 

    $('a').off(); 

    // Remove class from current active 
    $("#buttons a").removeClass('active'); 

    // Change class on clicked button 
    $(this).addClass("active"); 

    // Hide Non-Clicked Content 
    $(".main_content").fadeOut("fast"); 


    $("#content_container").slideUp("slow"); 

    // Find Selected 
    var selected = $(this).attr("href"); 

    // Show Selected 

    $("#content_container").slideDown("slow", function() { 
     $(selected).fadeIn("slow"); 
    }); 

    return false; 
}); 
+0

我不会那样做的,它可能是用户混淆。相反,请中止当前的动画。看看http://api.jquery.com/stop/。 –

+0

@Malk:在Chrome中适合我。 –

+0

是的,我也在Chrome中工作。 嗯,菲利克斯,这是我猜测的用户体验难题。 我只是不能让点击处理程序切换回来,或者说,我不知道如何或在什么点。 –

回答

2

如果我正确理解你的榜样,你要防止动画运行多次通过删除事件。

如果您删除活动,您将无法再次点击它,除非您再次附加活动。

下面是基于您的代码示例:http://jsfiddle.net/MkmnW/4/

$(document).ready(function() { 


$("#buttons a").click(function() { 
    $('a').off("click"); 
    clickMenu(this); 

    return false; 
}); 

function clickMenu(el){ 
    // Remove class from current active 
    $("#buttons a").removeClass('active'); 

    // Change class on clicked button 
    $(el).addClass("active"); 

    // Hide Non-Clicked Content 
    $(".main_content").fadeOut("fast"); 


    $("#content_container").slideUp("slow"); 

    // Find Selected 
    var selected = $(this).attr("href"); 

    // Show Selected 

    $("#content_container").slideDown("slow", function() { 
     $(selected).fadeIn("slow"); 

     $("#buttons a").click(function() { 
      $('a').off("click"); 
      clickMenu(this); 

      return false; 
     });    
    });  
} 
}); 
+2

太棒了,谢谢。只需要将'selected'变量声明中的'this'改为'el',那么它就可以完成。 另外,我有点困惑的功能,它是递归?我知道它是如何工作的,但是当函数自己调用时,我开始感到害怕! –

+0

你的欢迎汤姆。它不是我想的实际递归,当你点击一个标签时,你删除了onclick事件。所以你必须重新点击事件,所以你可以实际点击一个不同的按钮来做到这一点,我将你的代码移动到一个函数中,以便在滑动动画完成时绑定点击。你可以通过移除第二个onclick作业来测试这个,如果你做了第二次点击不会触发动画:) – Michael

0

您可以$(element).unbind('click');为解除绑定click事件。与所有其他类型的事件一样。

然后,您可以用$(element).bind('click', function(evt) { ... });

再次与他们在动画的情况下,可以$(element).click(function(evt) { $(this).stop().fadeOut("fast").whatever... });

+0

'bind' /'unbind'已经很老了并且已经被取代了。使用'on' /'关'。 –

+0

是的。我只习惯他们! :) –

+0

是的,我试图使用on/off,我只是没有得到如何实现.on来切换回 –

相关问题