2017-01-28 4 views
1

Ich habe ein Containerelement, das mehrmals geladen wird, um variablen Inhalt auf einem Klickereignis durch eine Ajax-Anfrage und nach Ajax zu zeigen Complete ich habe einige Funktionen aufgerufen einschließlich einer Funktion (A) innerhalb eine if-Anweisung.Funktion innerhalb if Anweisung mehrmals ausgeführt

Mein Problem ist, wenn Funktion (A) schließlich aufgerufen wird, wird es mehrmals aufgerufen, je nachdem wie oft der Container geladen wurde, bevor die if-Anweisung wahr ist.

ist hier einfache Version meines Code:

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

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

x ist ein Element $(".x"), die in den Container geladen werden und die Funktion (A) sollte nur aufgerufen werden, wenn das Element geladen wird. d. h. $(".x").length>0

Wenn (x.length> 0) wahr ist, sagen wir dreimal Laden des Containers, dann wird die Funktion (A) dreimal aufgerufen.

gibt es einen Weg um dies oder einen Weg, um sicherzustellen, dass Funktion (A) nur einmal aufgerufen wird ??

Edit: Mein vollständiger Code:

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(); 
      } 
     }); 
}; 

bitte davon aus, dass alle Variablen sind bereits definiert.

+0

nehmen 'A()' aus der Schleife hinzugefügt wird. oder '$ (Dokument) .one ('load', A)' – zer00ne

+0

Was ist 'x'? 'A' wird wahrscheinlich für jeden' ​​.container' genannt, natürlich abhängig vom Wert des ANONYMOUS 'x'. –

+0

'x' ist ein Element' $ (". X") ', das in den Container geladen wird und die Funktion (A) sollte nur aufgerufen werden, wenn dieses Element geladen wird. dh '$ (". x "). length> 0' – moamenezzat

Antwort

1

Es klingt wie Sie den gleichen Knopf klicken Zuhörer mehrmals das Hinzufügen sind

Sie sehen sollten, wie sich dies der Fall ist, da es nicht genug ist, gezeigt für uns zu wissen, warum. Ist es vielleicht in einen anderen Event-Handler eingebettet? Oder in einer Funktion, die mehrmals aufgerufen wird?

Eine Abhilfe ist, die Klick-Listener zu entfernen, bevor Sie eine neue

ändern

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

zu

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

Das wird das Problem nicht lösen, denke ich. Da er bereits nach '$ (". X "). Length> 0 'sucht, wären weitere Aufrufe sinnlos, wenn mindestens' ".x" 'Elemente vorhanden sind. –

+0

@ibrahimmahrir Länge von '$ (". X ")' ist irrelevant, wenn eine existiert und Ereignis Listener mehr als einmal angewendet wird oder die Funktion 'loadContainer' mehr als einmal aufgerufen wird oder' $ (". Container"). Length> 1 ' – charlietfl

+0

Aber selbst wenn die Funktion' loadContainer' mehr als einmal aufgerufen wird, wird die Überprüfung '$ (" .x "). Length> 0' wahr sein, daher wird' A' niemals aufgerufen. Das Problem ist wahrscheinlich etwas anderes (versteckt in diesem mysteriösen Code). –

Verwandte Themen