Klaus: Objekt Zugriff erst nachdem es geladen ist

Hey,
ich habe folgendes Problem:
Meine HTML Seite sieht folgendermaßen aus.

  
<body>  
<div id="container">  
</div>  
</body>  

Ich lade mit Jquery Daten über Java aus der Datenbank in den div und erstelle dabei neue diffs.

  
$(document).ready(function() {  
$("#container").html = "<div id=\"content\">Content</div>";  
});  

Nun möchte ich, für "content" edit in place, autocomplete oder sonst irgendeine Funktion aktivieren.

  
$("#content").autocomplete(...);  

Leider wird nicht immer zuerst der div geladen und dann die autocomplete Funktion aktiviert, dies in der Realität sehr viele divs sind.
Wie löse ich das Problem, dass die autocomplete Funktion erst aufgerufen wurde, nachdem die divs alle erstellt wurden?
In Jquery gibt es die Funktion load. Allerdings ruft die nur eine neue Seite auf und läd den Inhalt in dieses Objekt. Aber so in die Richtung müsste es ja gehen. Nur eben, dass die Funktion erst ausgeführt wird, wenn das Objekt geladen wurde.

Danke für die Hilfe.

  1. Grüße,

    Meine HTML Seite sieht folgendermaßen aus.

    <body>
    <div id="container">
    </div>
    </body>

      
    mager  
    
    > Ich lade mit Jquery Daten über Java aus der Datenbank in den div und erstelle dabei neue diffs.  
    
    wie bitte?  
      
    
    > In Jquery gibt es die Funktion load. Allerdings ruft die nur eine neue Seite auf und läd den Inhalt in dieses Objekt. Aber so in die Richtung müsste es ja gehen. Nur eben, dass die Funktion erst ausgeführt wird, wenn das Objekt geladen wurde.  
      
      
    noch mal zum mitschriebn - du benutzst jQuery ohne auch nur fortgeschrittene Kentnisse in JS zu haben? jetzt weiss ich warum ich bisher auf die frameworks verzichte - um die schande der "wie landet man das ding?"-frage zu vermeiden.  
      
    wenn ich die komische Java-bezogene Aussage weiter oben ignoriere, kann ich dir nur empfehlen  
    1)weg mit jQuery, kein Radln bevor du gehen lernst.  
    2)siehe oben  
    3)setzt dich mit events auseinander, insbesondere DOMready  
    MFG  
    bleicher
    
    -- 
    \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_-  
    ![](http://img296.imageshack.us/img296/9641/minibannerso7.jpg)  
      
    [FirefoxMyth](http://www.firefoxmyths.com)
    
    1. Moin!

      Grüße,

      Meine HTML Seite sieht folgendermaßen aus.

      <body>
      <div id="container">
      </div>
      </body>

      
      >   
      > mager  
      > > Ich lade mit Jquery Daten über Java aus der Datenbank in den div und erstelle dabei neue diffs.  
      > wie bitte?  
      >   
      > > In Jquery gibt es die Funktion load. Allerdings ruft die nur eine neue Seite auf und läd den Inhalt in dieses Objekt. Aber so in die Richtung müsste es ja gehen. Nur eben, dass die Funktion erst ausgeführt wird, wenn das Objekt geladen wurde.  
      >   
      >   
      > noch mal zum mitschriebn - du benutzst jQuery ohne auch nur fortgeschrittene Kentnisse in JS zu haben? jetzt weiss ich warum ich bisher auf die frameworks verzichte - um die schande der "wie landet man das ding?"-frage zu vermeiden.  
        
      OK, du outest dich hier also gerade als Nicht-Kenner von jQuery, trotzdem glaubst du, dass du dich qualifiziert zu diesem Thema äußern kannst.  
        
      Wundere mich insbesondere, wie man so eine Nicht-Antwort auch noch als hilfreich bewertet kriegen kann...  
        
       - Sven Rautenberg
      
      1. Grüße,

        OK, du outest dich hier also gerade als Nicht-Kenner von jQuery, trotzdem glaubst du, dass du dich qualifiziert zu diesem Thema äußern kannst.

        Wundere mich insbesondere, wie man so eine Nicht-Antwort auch noch als hilfreich bewertet kriegen kann...

        weil die Absicht stimmte^^

        Es würde mich nämlich zutiefst wundern, wenn jQuery, obgleich ich mich damit ,zugegebenermaßen, nicht auskenne, auch nur das geringste "selbstständig" unternimmt.Es muss also ein Funktionsaufruf erfolgen, und wie man diesen bis nach dem erreichen eines bestimmten Zustandes verzögert, hat mit jQuery nun mal nix zu tun, oder? Die DOMevents werden wohl am Schluss die sauberere Lösung sein, und was grundlegend Anderes, haben auch die folgenden Ratgeber nicht vorgeschlagen, wo soll also mein Vergehen sein?
        Im Nichtkennen der jQuery bei einem Problem, das AFAIK bedingt mit jQuery zu tun hat?
        MFG
        bleicher

        --
        __________________________-

        FirefoxMyth
  2. Hi!

    Wie löse ich das Problem, dass die autocomplete Funktion erst aufgerufen wurde, nachdem die divs alle erstellt wurden?

    Du darfst sie eben nicht früher aufrufen. Notfalls musst du eine Funktion aufrufen, nachdem der Ladevorgang beendet ist. Wenn du mit Ajax Daten nachlädst, bekommst du ja ein Ereignis, wenn das Laden fertig ist. Dann baust die Elemente in die Seite. Erst wenn ein Element existiert, kannst du ihm Eigenschaften hinzufügen. Oder du erstellst erst alle Elemente und fügst ihnen gemeinsam die Eigenschaften hinzu.

    In Jquery gibt es die Funktion load. Allerdings ruft die nur eine neue Seite auf und läd den Inhalt in dieses Objekt. Aber so in die Richtung müsste es ja gehen. Nur eben, dass die Funktion erst ausgeführt wird, wenn das Objekt geladen wurde.

    Du kannst Elementen Ereignishandler zuweisen, auch wenn sie noch nicht im DOM hängen. Aber es gibt kein Ereignis "OnInsDomGehängt". Das nützt dir als nichts. Ebenfalls gibt es kein generelles "Da wurde was ins DOM gehängt"- oder ein "Element X: Mir wurde was angehängt"-Ereignis. Das einfachste ist immer noch, wenn du nach erledigter Arbeit selbst das aufrufst, was du benötigst.

    Lo!

    1. Hey,
      vielen Dank erstmal für die vielen Antworten.
      Die Funktion in den Callback zu schreiben war auch meine erste Intuition. Leider erfolglos.
      mit document.ready() hatte ich auch keinen Erfolg.

      Ich habe jetzt versucht mit live und livequery (plugin für jquery) das Ganze zu regeln.

        
      $('#Content').livequery(function(){  
      $(this).autocomplete(...);  
      });  
      
      

      Das funktioniert in FF und Chrome auch super. Der IE streikt leider.

      Gruß,
      Klaus

      1. Hey,
        vielen Dank erstmal für die vielen Antworten.
        Die Funktion in den Callback zu schreiben war auch meine erste Intuition. Leider erfolglos.

        Was heißt leider erfolglos?
        Es passiert nichts?

        mit document.ready() hatte ich auch keinen Erfolg.

        Kein Wunder, $(document).ready(... wird aufgerufen wenn beim initialen Load der DOM-Tree fertig gerendert ist. Hat also gar nichts mit deinem Problem zu tun.

        Ich habe jetzt versucht mit live und livequery (plugin für jquery) das Ganze zu regeln.
        Das funktioniert in FF und Chrome auch super. Der IE streikt leider.

        Welcher?
        Du hast wahrscheinlich was falsch gemacht, normalerweise sind alle jQuery Funktionalitäten browserübergreifend kompatibel.

        --
        for your security, this text has been encrypted by ROT13 twice.
        1. Hey,
          vielen Dank erstmal für die vielen Antworten.
          Die Funktion in den Callback zu schreiben war auch meine erste Intuition. Leider erfolglos.
          Was heißt leider erfolglos?
          Es passiert nichts?
          mit document.ready() hatte ich auch keinen Erfolg.
          Kein Wunder, $(document).ready(... wird aufgerufen wenn beim initialen Load der DOM-Tree fertig gerendert ist. Hat also gar nichts mit deinem Problem zu tun.

          Ich habe jetzt versucht mit live und livequery (plugin für jquery) das Ganze zu regeln.
          Das funktioniert in FF und Chrome auch super. Der IE streikt leider.
          Welcher?
          Du hast wahrscheinlich was falsch gemacht, normalerweise sind alle jQuery Funktionalitäten browserübergreifend kompatibel.

          Ja ich hatte tatsächlich irgendwas falsch gemacht.
          Habe das ganze nochmal überarbeitet und neu hinzugefügt und siehe da es geht tatsächlich mit livequery(auch wenn das ein wenig alt ist).
          Also
          $('selector').livequery(function(){
          $(this).autocomplete();
          });

          Vielen Dank für eure Hilfe.

    2. Grüße,

      Du kannst Elementen Ereignishandler zuweisen, auch wenn sie noch nicht im DOM hängen. Aber es gibt kein Ereignis "OnInsDomGehängt". Das nützt dir als nichts. Ebenfalls gibt es kein generelles "Da wurde was ins DOM gehängt"- oder ein "Element X: Mir wurde was angehängt"-Ereignis.

      http://en.wikipedia.org/wiki/DOM_events , tabelle, unteres teils "mutations"

      MFG
      bleicher

      --
      __________________________-

      FirefoxMyth
      1. Hi!

        Du kannst Elementen Ereignishandler zuweisen, auch wenn sie noch nicht im DOM hängen. Aber es gibt kein Ereignis "OnInsDomGehängt". Das nützt dir als nichts. Ebenfalls gibt es kein generelles "Da wurde was ins DOM gehängt"- oder ein "Element X: Mir wurde was angehängt"-Ereignis.

        http://en.wikipedia.org/wiki/DOM_events , tabelle, unteres teils "mutations"

        Das ist DOM Level 3, wenn ich das richtig sehe, und das ist noch nicht fertig spezifiziert. Inwieweit kennen das die Browser schon?

        Lo!

        1. http://en.wikipedia.org/wiki/DOM_events , tabelle, unteres teils "mutations"

          Das ist DOM Level 3, wenn ich das richtig sehe, und das ist noch nicht fertig spezifiziert.

          Nein, das ist DOM 2 und seit 2000 standardisiert.

          Inwieweit kennen das die Browser schon?

          Hängt ganz vom Event-Typ ab, aber prinzipiell können das alle Browser (Gecko, Webkit, Presto) - der IE allerdings erst ab der kommenden Version 9.

          Mathias

  3. Ich lade mit Jquery Daten über Java aus der Datenbank in den div und erstelle dabei neue diffs.

    JavaScript.

    $(document).ready(function() {
    $("#container").html = "<div id="content">Content</div>";

    dafür hat jQuery die funktion "html()":
    $('#container').html('...');

    });

    
    >   
    > Wie löse ich das Problem, dass die autocomplete Funktion erst aufgerufen wurde, nachdem die divs alle erstellt wurden?  
    
    Was spricht dagegen den Funktionsaufruf in den Ajax-Callback zu schreiben?  
    Autocomplete wird dann nämlich wirklich erst aufgerufen wenn Content fertig gerendert ist: (Insbesondere mit ".html(...)" statt ".html")  
      
    
    > ~~~javascript
      
    
    > $(document).ready(function() {  
    > $('#container').html("<div id=\"content\">Content</div>");  
    > $("#content").autocomplete(...);  
    > });  
    > 
    
    
    --
    for your security, this text has been encrypted by ROT13 twice.