2017-01-28 15 views
1

Ajaxリクエストとajaxで可変のコンテンツを表示するために複数回読み込まれるコンテナ要素があります。完全な関数の中に関数(A)を含めて呼び出されていますifステートメントif文内で複数回実行する関数

私の問題は、関数(A)が最後に呼び出されたときに、if文がtrueになる前にコンテナがロードされた回数に応じて複数回呼び出されることです。

$(".button").on("click", function(){ 
    loadContainer(); 
}); 

var loadContainer = function(){ 
    $(".container").load(url, function(){ 
    var x = $(".x"); 
    if(x.length>0){ 
     A(); 
    }; 
    }); 
}; 

xは、その要素がロードされるときだけ呼ばれるべきコンテナと機能(A)にロードされる要素$(".x")です:

は、ここに私のコードのシンプルなバージョンです。すなわち、コンテナを3回ロードした後、関数(A)が3回呼び出された後に(x.length> 0)が真であれば、$(".x").length>0

です。

これには方法がありますか、関数(A)が一度だけ呼び出されるようにする方法はありますか?

編集: 私の完全なコード:

ajaxBtn.on("click", function(e) { 

     loadContainer(url, curtain, mainContainer, body, links); 
    }); 
var loadContainer = function(url, curtain, maincontainer, body, links) { 

     $(".main-container").load(url + " .main-container > *", function() { 
      $("#logo").css({ 
       "z-index": "400" 
      }); 

      mainFun(); 
      curtain.removeClass("full"); 
      links.removeClass("here"); 
      body.removeClass("no-scroll"); 
      clearInterval(timer); 
      getFlexIndex(); 
      position = 0; 

      if (vidContainer.length > 0) { 
       youTubeLazyLoad(); 
      } 
     }); 
}; 

すべての変数がすでに定義されていることを前提としてください。

+0

テイクに新しい1

変更

$(".button").on("click"... 

を追加する前に、クリックリスナーを削除することです '()'ループの外。または '$(document).one( 'load'、A)' – zer00ne

+0

'x'とは何ですか? 'A'はANONYMOUS' x'の値に応じて '.container'ごとにおそらく呼び出されます。 –

+0

'x'はコンテナにロードされる要素' $( "。x") 'であり、関数(A)はその要素が読み込まれるときにのみ呼び出されるべきです。 ( '.x")。length> 0' – moamenezzat

答えて

1

あなたは同じボタンクリックリスナーにあなたは私たちがなぜ知っているために示さ足りないとして、これはどのように発生するかを検討する必要があり、多数回

を追加しているようですね。それはおそらく他のイベントハンドラの中に組み込まれていますか?あるいは、何度も呼び出される関数で?

回避策は

$(".button").off('click').on("click"... 
+0

これは私が推測する問題を解決しません。彼はすでに '$("。x ")。length> 0'をチェックしているので、少なくとも' '.x" '要素があれば、より多くの呼び出しが無意味になります。 –

+0

'$("。x ")'の長さは存在し、イベントリスナーが複数回適用されている場合、または関数 'loadContainer'が複数回呼び出されている場合や' $( "。container")の長さとは無関係です。 ' – charlietfl

+0

しかし、' loadContainer'関数が複数回呼び出されたとしても、 '$("。x ")。length> 0'のチェックが真となり、' A'は決して呼び出されません。問題はおそらく他のものです(その神秘的なコードに隠されています)。 –

関連する問題