2012-12-23 119 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

我知道我錯過了簡單的東西:)這解決了這個問題。 謝謝你的幫助。 –