2012-05-23 53 views
1

後並不總是運行該代碼似乎完美地工作:當我當我添加的延遲和排隊一個函數的代碼變得喜怒無常,有時那類是jQuery的延遲和排隊window.onhashchange

window.onhashchange = function(){ 
    if (!window.location.href.match('#pop')) { 
     //alert('go back last'); 
     $('#main').removeClass('hidden'); 
     $('.pop').removeClass('pop-ready'); 
     $('.pop').addClass('pop-hidden'); 
    } 

    /* navigate back after back button */ 
    if (!window.location.href.match('#secondpage')) { 
     $('#pageCont').removeClass('posTwo'); 
     $('#pageOne').removeClass('hidden'); 
     $('#pageTwoInner').addClass('hidden'); 

    } 
    if (window.location.href.match('#secondpage')) { 
     $('#pageCont').addClass('posTwo'); 

     $('#pageTwoInner').removeClass('hidden'); 
    } 
}; 

然而不添加:

window.onhashchange = function(){ 
    if (!window.location.href.match('#pop')) { 
     //alert('go back last'); 
     $('#main').removeClass('hidden'); 
     $('.pop').removeClass('pop-ready'); 
     $('.pop').addClass('pop-hidden'); 
    } 

    /* navigate back after back button */ 
    if (!window.location.href.match('#secondpage')) { 
     $('#pageCont').removeClass('posTwo'); 
     $('#pageOne').removeClass('hidden'); 
        /* CHANGE HERE */ 
     $('#pageTwoInner').delay(200).queue(function(){ 
      $(this).addClass('hidden'); 
     }); 
    } 
    if (window.location.href.match('#secondpage')) { 
     $('#pageCont').addClass('posTwo'); 

     $('#pageTwoInner').removeClass('hidden'); 
    } 
}; 

回答

0

使用queue(),你要出隊的下一個項目或回調鏈將被打破。

有兩種方法可以實現這一點。無論是從回調調用dequeue()

$("#pageTwoInner").delay(200).queue(function() { 
    $(this).addClass("hidden").dequeue(); 
}); 

或撥打next參數傳遞給你的回調:

$("#pageTwoInner").delay(200).queue(function(next) { 
    $(this).addClass("hidden"); 
    next(); 
}); 
+0

你的答案在技術上是有效的,但它似乎並沒有解釋爲什麼_currently_排隊功能ISN不會運行 - 這隻能解釋爲什麼_subsequent_ queued事件不運行。 – Alnitak

+0

@Alnitak,我想這正是這裏發生的事情,這就是爲什麼提問者說'代碼變得脾氣暴躁,有時候這個類沒有被添加。 –

+0

如果沒有添加類,則表示_this_函數未被排隊,而不是後面的函數未被排隊。 – Alnitak