0

有人可以告诉我为什么return false不工作吗?我只想检查电流是否为黄色。如果是黄色类,则什么也不做(返回 false)。问题是当您单击一个按钮时,它会再次运行它,但我想避免这种情况。这是问题的关键

/*INSIDE THIS CODE RETURN FALSE NOT WORKING!!*/
$('.yellowcontroll').click(function(){

    if($yellow.after('.current').length){
        $('.yellow').show();
        $('.slideswrapper:not(:animated)').animate({'marginLeft':'-=100'},1000,function(){
            $('.current').removeClass('current').hide();
            $('.yellow').addClass('current');
            $('.slideswrapper').css({'margin-left':'0px'});

            if($('.current').is($('.slideswrapper div:last'))){
                $('.blue,.green,.red').clone().insertAfter('.slideswrapper div:last');
            }

            if($('.current').is($('.red'))){
                $('.red').prevAll().remove(':not(.yellow)');
                $('.yellow').insertAfter($('.slideswrapper div:last'));
            }

            /*THIS IS NOT WORKING AS EXPECTED!!*/    
            if($('.current').is($('.yellow'))){
                return false;
            }
        });
    }

});
4

5 回答 5

2

问题是您从回调返回 false 到动画,而不是事件回调。

如果您在第二次单击时没有发生任何事情,那么您可以移动条件并将 false 返回到单击回调的前面:

$('.yellowcontroll').click(function(){

    /* MOVE THIS TO THE BEGINNING OF THE CLICK CALLBACK */    
    if($('.current').is($('.yellow'))){
        return false;
    }

    if($yellow.after('.current').length){
        $('.yellow').show();
        $('.slideswrapper:not(:animated)').animate({'marginLeft':'-=100'},1000,function(){
            $('.current').removeClass('current').hide();
            $('.yellow').addClass('current');
            $('.slideswrapper').css({'margin-left':'0px'});

            if($('.current').is($('.slideswrapper div:last'))){
                $('.blue,.green,.red').clone().insertAfter('.slideswrapper div:last');
            }

            if($('.current').is($('.red'))){
                $('.red').prevAll().remove(':not(.yellow)');
                $('.yellow').insertAfter($('.slideswrapper div:last'));
            }
        });
    }

});
于 2012-04-10T17:06:53.620 回答
1

您小提琴中的代码一团糟,但根据您的问题,您似乎只是将逻辑放在错误的位置。尝试将您的return false逻辑放在点击事件的顶部:

$('.yellowcontroll').click(function(){
    if($('.current').is($('.yellow'))){
        return false;
    }
    ...
  });

这个小提琴应该做你想做的。

于 2012-04-10T17:07:31.280 回答
1

我认为您想将该代码段放在单击处理程序的开头:

http://jsfiddle.net/mihaifm/3YLEg/2/

$('.yellowcontroll').click(function(){
          /*THIS IS NOT WORKING AS EXPECTED!!*/    
          if($('.current').is($('.yellow'))){
                 return false;
                } 
于 2012-04-10T17:08:24.083 回答
1

将条件错误代码移动到单击处理程序的开头,如下所示并使用hasClass如下。

演示

    if ($('.current').hasClass('yellow')) {
        return false;
    }
于 2012-04-10T17:09:16.757 回答
1
if($('.current').is('.yellow')){
    return false;
}
于 2012-04-10T17:09:49.840 回答