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 を返すことです。

2 回目にクリックしたときに何も起こらないことを探している場合は、条件を移動して、クリック コールバックの前に 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

以下のように、条件付き false コードをクリック ハンドラーの先頭に移動し、以下のように使用し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 に答える