2010-12-18 10 views
13

Ich habe ein Problem mit dem JavaScript-Code in einem AJAX geladen div zu arbeiten, ich versuche, jquery Tabs einzuschließen, aber es funktioniert nicht, der Ajax gibt nur Text und erkennt nicht Javascript. Jede Hilfe wäre nett.JavaScript funktioniert nicht in AJAX geladen DIV

Hier ist mein js Code:

var OpenedPage; 

function load(url, target) { 
    document.getElementById(target).innerHTML = 'Loading ...'; 
    if (window.XMLHttpRequest) { 
     req = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 
     req = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    if (req != undefined) { 
     req.onreadystatechange = function() { 
      loadDone(url, target); 
     }; 
     req.open("GET", url, true); 
     req.send(""); 
    } 
} 

function loadDone(url, target) { 
    if (req.readyState == 4) { // only if req is "loaded" 
     if (req.status == 200) { // only if "OK" 
      document.getElementById(target).innerHTML = "loaded" + req.responseText; 
     } else { 
      document.getElementById(target).innerHTML = "Error:\n" + req.status + "\n" + req.statusText; 
     } 
    } 
} 

function unload() { 
    if (OpenedPage == "divsignin") { 
     unloaddivsignin(); 
    } 
    if (OpenedPage == "divHowto") { 
     unloaddivHowto(); 
    } 

} 

function ShowHidedivsignin() { 
    unload(); 
    OpenedPage = "divsignin"; 
    load("../slogin.php", "divsignin"); 
    $("#divsignin").animate({"height": "toggle"}, {duration: 800}); 
} 

function unloaddivsignin() { 
    OpenedPage = ""; 
    $("#divsignin").animate({"height": "toggle"}, {duration: 800}); 
} 

function ShowHidedivHowto() { 
    unload(); 
    OpenedPage = "divHowto"; 
    load("../howto.php", "divHowto"); 
    $("#divHowto").animate({"height": "toggle"}, {duration: 800}); 
} 

function unloaddivHowto() { 
    OpenedPage = ""; 
    $("#divHowto").animate({"height": "toggle"}, {duration: 800}); 
} 

Und die HTML:

<div id="divsignin" style="display:none;width:auto"> </div> 


<a onClick="ShowHidedivHowto(); return false;" href="#">help</a> 
+3

Nur zur Info, es ist JavaScript, nicht Java-Script :) – dheerosaur

Antwort

9

ich die gesamten Code nicht überprüft haben, aber was sind Sie mit dem Javacript in Ihr div geladen auslösen? das Fenster/Dokument bereit Funktionen nur einmal wird ausgelöst, wenn die Seite geladen wird zunächst ...

Versuchen Sie, die so etwas wie die folgenden für den Inhalt in den div geladen ...

<div id="tabs"> 
    <ul> 
     <li><a href="#fragment-1"><span>One</span></a></li> 
     <li><a href="#fragment-2"><span>Two</span></a></li> 
     <li><a href="#fragment-3"><span>Three</span></a></li> 
    </ul> 
    <div id="fragment-1"> 
     <p>First tab is active by default:</p> 
     <pre><code>$('#example').tabs();</code></pre> 
    </div> 
    <div id="fragment-2"> 
     Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. 
     Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. 
    </div> 
    <div id="fragment-3"> 
     Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. 
     Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. 
     Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. 
    </div> 
</div> 
<script type="text/javascript"> 
    $("#tabs").tabs(); 
</script> 

Beachten Sie die Script-Tag ist am Ende, so wird es nach dem Laden der Tabs geparst werden.

Die Alternative wäre, die Funktion aufgerufen zu ändern, wenn AJAX erfolgreich ist und

$("#tabs").tabs(); 

bis zum Ende des es hinzufügen - wieder wird dies der Code sicher läuft nur, nachdem der Inhalt geladen wurde.

+0

dank Basiclife, ich bin kein js Experte, so bezahlt i a freiberuflicher Programmierer, um diesen Code zu bauen, und er Dosent Antwort auf meine E-Mails und ließ mich stecken wie diese – ihab

+1

Ok ... Lange Rede kurzer Sinn gibt es 2 wichtigsten Dinge, die Sie tun 1: Definieren von Funktionen ausgeführt werden, wenn ausgelöst und 2: anhängen diese Funktionen zu Triggern. Die Standard-JQuery-Methode zum Ausführen von Code ist, wenn das Dokument fertig ist - dh wenn die Seite größtenteils geladen ist. Dieses Ereignis wird nur einmal ausgelöst und würde nicht erneut ausgelöst, wenn Sie den Inhalt in das Div laden. Können Sie zeigen, dass die JS, die Sie laden, in das Div, das nicht funktioniert, und wir können von dort gehen ... – Basic

+0

okay, in der Kopfzeile der Hauptseite habe ich jquery.js & jquery-tabs.js angehängt. und auf der Seite, die in das div geladen wird, habe ich den html für die Tabs. Ich habe auch versucht, jquery.js & jquery-tabs.js in die geladene Seite zu integrieren, funktioniert aber immer noch nicht. – ihab

7

Da Sie bereits jQuery verwenden, sollten Sie mit dem Refactoring beginnen, um lesbarer und damit wartungsfreundlicher zu sein. Bemerkenswert ist, können Sie die Ladefunktion Graben, und ein ähnliches Muster wie diese übernehmen:

$(document).ready(function() { 

    // <a class="help" href="help.html">help</a> 
    $("a.help").live("click", function() { 
     $("#divHowTo").html("Loading..."); 
     $.ajax({ 
      url: "../howto.php", 
      dataType: "html", 
      success: function(html) { 
       $("#divHowTo").html(html) 
        .animate({"height": "toggle"}, { duration: 800 }); 
      } 
     }); 
     return false; 
    }); 
}); 
Verwandte Themen