2012-05-23 33 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