2012-04-10 8 views
0

Может кто-нибудь сказать мне, почему return false не работает? Я просто хочу проверить, является ли ток желтым. Если это желтый класс, ничего не делайте (возвращайте false). Проблема в том, что когда вы нажимаете кнопку, она снова запускает свое дело, но я хочу этого избежать. Адрес the Fiddle of the problem.Return false not working

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

}); 
+0

Вы пробовали добавить console.log() в строке, где вы ожидали, чтобы вернуться ложным? Достигает ли эта часть вашего кода? –

+0

Пожалуйста, отформатируйте свой код перед публикацией, чтобы нам было намного легче читать и понимать. –

ответ

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')); 
      } 
     }); 
    } 

}); 
+0

Так как я могу это решить? –

+0

Не совсем уверен, что вы пытаетесь сделать ... Я обновлю одну возможность. – Prestaul

+0

Я обновил одно возможное решение, но я не могу быть уверен, что это то, что предполагаемое поведение ... – Prestaul

1

Код в вашей скрипке это беспорядок, но, основываясь на вашем вопросе, кажется, что вы просто ошибаетесь в своей логике. Попробуйте разместить вашу return false логику в верхней части щелкните событие:

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

This fiddle должны делать то, что вы хотите.

1

Я думаю, что вы хотите поместить этот фрагмент кода в начале обработчика щелчка:

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

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

Move условный ложный код в начало обработчика щелчка, как показано ниже, и использовать hasClass как показано ниже.

DEMO

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