2016-04-15 18 views
0

Ich habe ein Problem mit einer Website, die jQuery und native JS zusammen verwendet.Verwenden Sie jQuery, um das Vorhandensein eines Elements zu ermitteln, das von nativem AJAX mit einer Schleife hinzugefügt wurde.

Ich versuche, den jQuery UI Datepicker zu einer Eingabe hinzuzufügen, die der Seite mit nativem AJAX hinzugefügt wird. Mein Problem ist, dass jQuery ausgeführt wird, bevor der AJAX das div der Seite hinzufügt.

Ich kann dies leicht mit dem folgenden Code beheben, aber ich möchte nicht, dass die jQuery ständig auf das Vorhandensein des Elements auf Seiten überprüfen, wo es nie existiert. Ich bin besorgt, dass dies eine riesige Menge an Speicher verbrauchen wird? Nutzt die Funktion setTimeout Speicher, wenn sie endlos auf die Existenz eines Elements prüft?

Jeder Rat oder eine Lösung wäre fantastisch.

Prost

(function() { 
    window.main = window.main || {}; 

    /* 
    * Initialisation function 
    */ 
    main.init = function() { 
     main.datePicker(); 
    }, 


    /* 
    * Datepicker function 
    */ 
    main.datePicker = function() { 
     // If the input is visible/has loaded do the datepicker function 
     var datePickerInput = $('.datepicker'); 
     if(datePickerInput.is(':visible')) { 
      datePickerInput.datepicker({ 
       minDate   : 0, 
       dateFormat  : "dd/mm/yy", 
       showOn   : "button", 
       buttonImage  : "images/jquery-ui/calendar.gif", 
       buttonImageOnly : true, 
       buttonText  : "Select date" 
      }); 
     // otherwise recall the function 
     } else { 
      setTimeout(function() { main.datePicker(); }, 2000); 
     } 
    } 
})(); 


// Initialise 
$(document).ready(function() { 
    main.init(); 
}); 
+1

_Webseite, die jQuery und native JS zusammen verwendet_ ist jQuery in der Lage, ohne native JS zu arbeiten? :) – smnbbrv

+0

Nein, ist es nicht. Ich meine, viele native JS-Code und jQuery-Code arbeiten zusammen. Beide haben verschiedene Jobs etc. – Jonathan

+0

haben Sie versucht, den Aufruf main.init() zum Ajax-Erfolgsereignis hinzuzufügen? – errand

Antwort

0

Die Antwort ist main.datePicker() hinzuzufügen; zum Ajax-Erfolgsereignis.