从匿名单击处理函数中删除jQuery单击处理程序

时间:2012-10-24 22:32:31

标签: jquery event-handling anonymous-function

我有一个匿名函数处理一组单选按钮上的单击事件后的过程。

在此函数中,会发生一些动画,我希望禁用click事件,直到函数结束,以防止它再次从函数内触发。

该函数调用每个单选按钮共有的类名:

$(".question1").click( function(){  

如何在函数执行任何动画时禁用此类元素上的任何进一步点击事件,并在完成后恢复它?

我已经尝试使用removeClass()和addClass()来实现这一点,但它似乎不能在函数中运行。

我也尝试过.off()和.on()没有运气。

单选按钮本身在函数内被禁用,但由于在类名上调用了该函数,因此单击事件仍然会触发。

非常感谢。

3 个答案:

答案 0 :(得分:0)

我会选择其他路线,如果元素正在动画中,我会检查点击处理程序,在这种情况下只返回,因为你必须使用:animated选择器,如下所示:

$(".question1").click( function(){
   if ( $('#element').is(':animated') ) {
      return;
   }
   //rest of code
});

答案 1 :(得分:0)

您可以禁用单击按钮,然后在动画完成后重新启用它。

$(".question1").click( function(){ 
   var that = this; 
 $(this).attr('disabled','disabled');
 $('.anim_div').animate({
    opacity: 0.25,
    left: '+=50',
    height: 'toggle'
   }, 5000, function() {
        $(that).attr('disabled',false);
 });
});

http://api.jquery.com/animate/

对于多个动画,您可以考虑使用延迟来检测所有动画何时完成。

答案 2 :(得分:0)

一定是错的......开/关功能效果很好,也是类选择器。

你能放一些代码吗?作为一个小提琴,我们可以尝试帮助。

如果你不能给我们代码,我会尝试:

// triggered only if the class is not disable
$(".question1:not(:disabled)").on('click', function(){
    // do something...
});

function theClick(){
    $(".question1").on('click', function(){
        // do something...
    });
}
function theAnimation(){
    $("#someId").on('click', function(){
        $(".question1").off('click'); // disable the click
        // do some animation
        // do more...
        // and more...
        theClick(); // finish, so re-enable
    });
}