2012-02-11 10 views
3

ポップアップウィンドウにバインドするだけで、イベントは常に2回トリガされます。ポップステートイベントへのバインドウィンドウを2回トリガ

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

これを引き起こすMyFunctionの中には何も()ありません - 私はシンプルに、この機能を除去しようとしました:

console.log('triggered'); 

、結果は同じです。これは常に2回トリガーされます(Safari、Chrome & Firefoxでテスト済み)。

私はHTML5履歴APIに問題があることは知っていますが、「try History.js」以外のアドバイスは感謝して受け取ります!

+0

はFF 10で再現可能ていない、あなたの完全なコードを表示することができますか? –

+0

こんにちは@RobW - '完全な'コードは3000 +ラインです!しかし、 'myFunction()'はイベントを2回実行することとは関係がないようです。私はまだFF 10.0.1(OSX)で問題を解決します –

+0

これは、ASP.ORBを通常のASP:ボタンを使ってhistory.go/backにしてからasp、net postbackを実行すると、ASP.NETで発生するように見えるかもしれません。 – StingyJack

答えて

6

[OK]を、私はこれを解決する方法を考え出し:

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イベントが2回トリガーされます。ブラウザーの戻るボタンを使用するだけです。

私は回避策としてタイムアウトを使用します。

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