0

毎分関数を呼び出す必要がある 2 つのページがあるため、 を使用してこれを行いsetInterval()ました。ただし、ページに移動するたびに新しい間隔が作成され、最終的にサイトが停止します。ページから移動するたびに間隔をキャンセルする方法はありますか?

var pollinginterval = 60000;

$('#HomeViewPage_MyLocation').live('pagebeforeshow', function(toPage, fromPage){
    GetUsersByLocation();

    setInterval(function() {
        GetUsersByLocation();
    }, pollinginterval);
});     


$('#HomeViewPage_ColleagueLocation').live('pageshow', function(toPage, fromPage){
    GetAllUsersByTeam();
    GetAvailableTeams();

    setInterval(function() {
        GetAllUsersByTeam();
        GetAvailableTeams();
    }, pollinginterval);
});
4

2 に答える 2

0

これは、jQMに複数のイベントに関する問題があるためです。問題ありません。あなたの場合、ページにアクセスするたびに同じイベントが再度適用されることを理解する必要があります。

この問題を解決するには、次の2つの方法があります。

  1. ライブの代わりに、bind/unbindおよびon/offを使用してイベントをバインド解除してから、各pagebeforeshow/pageshowの後に同じ要素に再度バインドします。これはそれほど良いアプローチではありません。

クリックイベントの例:

$('#elementID').unbind();
$('#elementID').bind('click', function(e) {

});
  1. 正しい方法は、イベントフィルタを使用して、イベントがすでにバインドされているかどうかを確認することです。ここで見つけることができます:http://www.codenothing.com/archives/2009/event-filter/

クリックイベントの例:

$('#elementID:Event(click)').each(function(){

}); 
于 2012-12-14T17:23:18.720 に答える
0

ブラウザのページを更新するときですか?次に、次をリッスンして停止できますunload

var runMyFunction = function() {
  // clear interval
};

window.onunload = runMyFunction();

そうでない場合でも、内部ページ変更の間隔をクリアできます。

于 2012-12-14T16:34:29.163 に答える