2016-08-04 23 views
2

は、私は、特定のデータがロードされた後、ウィンドウのカスタマイズされたジョブが、サイズ変更トリガする:jQuery on()メソッドのバインドを2回回避するにはどうすればよいですか?

function doJob() { 
    ... 
} 

DataLoaded() { 
    $(window).on("resize", function() { doJob(); }); 
} 

しかしDataLoadedが発生したことができ、複数回、どのように私は確信してdoJob()が一度だけバインドすることができますか? 。

一度結合し、ますが、複数回実行することができますので、$( "... ")PLEASE 1は、(" ...")IMO私の目標

ではありません。

メソッドがバインドされている場合
  1. は( "サイズを変更"、....)に。( "サイズを変更する")
  2. $(ウィンドウ)冗長.offに見えた、チェックするために、グローバル変数isBindを設定し、I ()を最初に呼び出すのが安全な方法であるかどうかわからない
+0

あなたは 'doJob()'を複数回ではなく一度だけ呼びたいと思っていますか? –

+0

@ M.Tanzilはい、複数回にすることができます。私は私の質問を更新しました。 – ineztia

+1

'$(window).resize(doJob);' – 4castle

答えて

2

あなたは、このようなフラグ変数を設定することができますバインドこのようなイベントのバインドを解除することができます

var didJob = false; 
DataLoaded() { 
    $(window).on("resize", function() { 
    if(!didJob){ 
     doJob(); 
     didJob = true; 
    } 
    }); 
} 

をしかし、私はわからない方法を説明しますこの関数内でwindow resizeもチェックしているので、DataLoaded関数を複数回呼び出しています。だから、複数回呼び出されるべきではありません。おそらくあなたは、このようにしたい:あなたがresize.DataLoadedを参照してください上記の例では

$(window).off("resize.DataLoaded").on("resize.DataLoaded", function() { 
    doJob(); 
}); 

DataLoadedevent namespaceです。まず、DataLoaded名前空間でresizeイベントのバインドを解除し、他のresizeイベントに影響を与えないように、DataLoaded名前空間でresizeイベントをバインドします。

1

あなたは毎回あなたはそれが

$(window).unbind("resize"); 
$(window).bind("resize", function() { doJob(); }); 
+0

'on()'と 'off()'を使うのが好ましい – 4castle

+0

解決策はたくさんあります。 – VinhNT

+2

@VinhNT以前に "window.resize"を持つ他のプラグインが登録されていれば、unbindそれらの束縛? – ineztia

0

私はこのようにして、変数を宣言し、doJob()関数がそれをチェックした後にインクリメントすると思います。

function doJob() { 
     ... 
    } 

    var once = 0; 
    DataLoaded() { 
    $(window).on("resize", function() { 
     if(once == 0){ 
      doJob(); 
      once++; 
     } 
    }); 
    } 

これが役に立ちます。

関連する問題