2012-12-23 76 views
0

我必须缺少一些简单的东西,或者我这样做完全错误。我的目标很简单。我想动画.show().hide()和我使用回调等待一个动画完成,我得到两个问题。jQueryUI .show()回调不会等待动画结束

  1. 动画触发两次
  2. 回调执行不久/不等待第一个动画结束,

这里是我的jQuery代码:

$('#miles').on({ 
    keyup: function(){if($(this).hasClass('error')){$(this).removeClass('error',animSpeed);}}, 
    focusin: function(){thisTime=$(this).val();if($(this).hasClass('error')){$(this).removeClass('error',animSpeed);}if($(this).val()=='miles'){$(this).val('');}}, 
    focusout: function(){ 
    if($(this).val()==''){$(this).val('miles');} 
    else if(thisTime!=$(this).val()){ 
     if($(this).val().match(/^[0-9]+$/)&&$(this).val()>0){ 
     $.post('include/process.php',{q:'saveMiles',e:$('#email').val(),w:$(this).val()},function(json){ 
     if(json.error==null||json.error==undefined){ 
     $('#saved').html('last saved '+json.date); 
     }else{ 
     $(this).addClass('error',animSpeed); 
     if(json.type=='notaNumber'){$('#errorBox>p').hide('fade',animSpeedErr,function(){$('.'+json.type).show('fade',animSpeedErr);})}; 
     } 
     },"json"); 
     }else{ 
     console.log('now'); 
     $(this).addClass('error',animSpeed); 
     $('#errorBox>p').hide('fade',animSpeedErr,function(){console.log('now1'); 
     if($('#miles').val()==0){console.log('now2');$('.notZero').show('fade',animSpeedErr);} 
     else{console.log('now3');$('.notaNumber').show('fade',animSpeedErr);} 
     }); 
     } 
    } 
    } 
    }); 


var animSpeed=700; 
var animSpeedErr=350; 
json.type = what kind of error to show 

#errorBox> p有显示:无;在CSS中声明

此代码的功能:检查#miles是否为数字,如果数字大于0,如果不是,则隐藏以前的错误并显示当前错误。如果我运行该脚本,我得到这个控制台:

now 
now1 
now2 
now1 
now2 
now1 
now2 
now1 
now2 

Script是活在http://developer.sodobniinternet.eu/concertdrive。只需在“英里”输入框中输入0或字母,您就会看到问题。

我试着用:

.stop(true,true) 

没有成功。

也试图从回调中删除,有时候像我想要的那样工作,有时候不会。这就是为什么我认为有一个回调,当前一个完成时调用一个函数。

谢谢你的任何和所有的帮助。

回答

1

问题在于选择:

$('#errorBox>p').hide('fade',animSpeedErr,function(){console.log('now1') 

有在#errorBox四段和每个被单独隐藏的,所以你.hide()回调函数被调用4次,每次focusout事件

+0

我知道我错过了简单的东西:)这解决了这个问题。 谢谢你的帮助。 –