kostenloser Webspace werbefrei: lima-city


Javascript: appendChild()

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    nerdinator

    Kostenloser Webspace von nerdinator, auf Homepage erstellen warten

    nerdinator hat kostenlosen Webspace.

    Moin, folgendes Problem:

    function NewWindow(WindowContent, Options)
    {
            var NewWindow = document.createElement(\"DIV\");
            NewWindow.id = WindowContent + \"_\" + WindowId;
            NewWindow.setAttribute(\'class\',\'Window\');
            
            var NewHeader = document.createElement(\"DIV\");
            NewHeader.id = WindowContent + \"_header_\" + WindowId;
            NewHeader.setAttribute(\'class\',\'Header\');
            
            var NewContent = document.createElement(\"DIV\");
            NewContent.id = WindowContent + \"_content_\"+WindowId;
    
            var NewWindowContent = \"./inc/\" + WindowContent + \".php\"
            new Ajax.Request(
                    \'load.php\', 
                    {
                            method: \'post\',
                            parameters: \'content=\' + NewWindowContent ,
                            onComplete: function(response){ NewWindow.innerHTML = response.responseText; }
                    }
            );                
            $(\'main_window\').appendChild(NewWindow);
            $(WindowContent + \"_\" + WindowId).appendChild(NewHeader);
    }


    Klingt logisch, finde ich. Nur der zweite appendChild läuft irgendwie nicht. Kann mir wer sagen, warum?



    Beitrag geändert: 20.7.2008 0:41:28 von nerdinator
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. m******s

    Das Problem ist anscheinend, dass Ajax ein asynchroner Aufruf ist. D.h. die Ajax Funktion wird angestupst, die Funktion wird weiter ausgeführt, und wenn er fertig ist, springt er zur im onComplete-Parameter angegebenen Funktion. Das ist ja gerade der Vorteil von Ajax - dass es asynchrone Aufrufe sind.

    Es passiert bei dir also folgendes:

    -> Er erstellt das Div-Element NewWindow
    -> Er erstellt das Div-Element NewHeader
    -> Er erstellt das Div-Element NewContent
    -> Er stößt das Ajax-Request asynchron an (Die Fkt. in onComplete wird noch nicht ausgeführt)
    -> Er fügt zu \'main_window\' das Div-Element NewWindow hinzu
    -> Er fügt zum newWindow-Div das Element NewHeader hinzu
    -> Er ist fertig mit der Funktion - wenig später ist das Ajax-Request fertig und er führt die onComplete:function aus:
    -> Er setzt die innerHTML-Eigenschaft auf den empfangenen Text und überschreibt damit alles, was in dem Div-Element stand, inklusivce dem angehängten Div-Element newHeader.

    Deshalb scheint es so, als hätte er gar nicht erst das Element angehängt.
  4. Autor dieses Themas

    nerdinator

    Kostenloser Webspace von nerdinator, auf Homepage erstellen warten

    nerdinator hat kostenlosen Webspace.

    Ah, also liegt das Problem einfach nur in der Reihenfolge...

    function NewWindow(WindowContent, Options)
    {
            var NewWindow = document.createElement(\"DIV\");
            NewWindow.id = WindowContent + \"_\" + WindowId;
            NewWindow.setAttribute(\'class\',\'Window\');
            
            var NewHeader = document.createElement(\"DIV\");
            NewHeader.id = WindowContent + \"_header_\" + WindowId;
            NewHeader.setAttribute(\'class\',\'Header\');
            $(\'main_window\').appendChild(NewWindow);
            $(WindowContent + \"_\" + WindowId).appendChild(NewHeader);        
            var NewContent = document.createElement(\"DIV\");
            NewContent.id = WindowContent + \"_content_\"+WindowId;
    
            var NewWindowContent = \"./inc/\" + WindowContent + \".php\"
            new Ajax.Request(
                    \'load.php\', 
                    {
                            method: \'post\',
                            parameters: \'content=\' + NewWindowContent ,
                            onComplete: function(response){ NewWindow.innerHTML += response.responseText; }
                    }
            );                
    }


    Scheint zu funktionieren. Schankedön :)


    Beitrag geändert: 20.7.2008 0:54:07 von nerdinator


    Beitrag geändert: 20.7.2008 0:56:16 von nerdinator
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!