返回false不工作

时间:2012-04-10 17:02:41

标签: javascript jquery

有人可以告诉我为什么return false无效吗?我只想检查电流是否为黄色。如果是黄色类则不要做任何事情(返回false)。问题是当你点击一个按钮它再次运行它的东西但我想避免这种情况。 这是the Fiddle of the problem

/*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;
            }
        });
    }

});

5 个答案:

答案 0 :(得分: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'));
            }
        });
    }

});

答案 1 :(得分:1)

你小提琴中的代码很乱,但根据你的问题,你似乎只是把你的逻辑放在了错误的地方。尝试将return false逻辑放在点击事件的顶部:

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

This fiddle应该做你想做的事。

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

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

DEMO

    if ($('.current').hasClass('yellow')) {
        return false;
    }

答案 4 :(得分:1)

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