2012-02-11 68 views
3

只需將窗口(在jQuery中)綁定到popstate,事件總是觸發兩次。綁定窗口popstate事件觸發兩次

$(window).bind('popstate', myFunction); 

沒有什麼在myFunction的()造成這一點 - 我已經試過這個功能剝離出來,以一個簡單的:

console.log('triggered'); 

,結果是一樣的。它總是被觸發兩次(在Safari中進行測試,Chrome瀏覽器爲Firefox &)。

我知道HTML5歷史API存在問題,但除了'嘗試History.js'以外的任何建議都會非常感激!

+0

沒有可重放的FF 10.可以顯示完整的代碼? – 2012-02-11 13:23:33

+0

Hi @RobW - 「完整」代碼是3000多行!但是'myFunction()'似乎與事件觸發兩次沒有任何關係。我仍然在FF 10.0.1(OSX)中遇到這個問題 – 2012-02-11 14:32:39

+0

如果您使用常規的ASP:按鈕作爲其嘗試history.go/back,然後執行asp,net postback,這也可能會出現在ASP.NET中。 – StingyJack 2016-03-28 19:22:16

回答

6

好吧,我想出了一個辦法來解決這個問題:

jQuery(function($ ){ 

    var currentPageNo = location.hash || 1; 

    var myFunction = function(){ 

    var pageNo = location.hash; 

    if(pageNo != currentPageNo){ 

     // trigger AJAX stuff here 

     currentPageNo = pageNo; 

    } 

    }; 

    $(window).bind('popstate', myFunction); 

}); 

只有觸發功能一次,但狀態仍然觸發兩次!

0

當使用歷史API(即histry.back()和history.go(-1))時,popstate事件被觸發兩次。但只需使用瀏覽器後退按鈕即可。

我使用超時作爲一種解決方法:

var timeout = null; 
$(window).bind('popstate', function(event) { 
    clearTimeout(timeout); 
    timeout = setTimeout(function() { 
     console.log('triggered'); 
    }, 50); 
});