2010-12-18 16 views
13

Mam problem z uzyskaniem kodu javascript do pracy wewnątrz ładowanego div AJAX, próbuję dołączyć tabulatory jquery, ale to nie działa, ajax wyświetla tylko tekst i nie rozpoznaje javascript. Każda pomoc się przyda.JavaScript nie działa w załadowanym AJAX DIV

Oto mój kod JS:

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

I HTML:

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


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

Tylko dla informacji, to JavaScript, nie skrypt java :) – dheerosaur

Odpowiedz

9

nie sprawdzili cały swój kod, ale co używasz do uruchomienia javacript załadowany do div? okno/dokument funkcje gotowe będą uruchamiane tylko raz, gdy strona jest wstępnie załadowany ...

Spróbuj coś jak następuje za treść załadowanego do dz ...

<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> 

Uwaga tag script jest na końcu, więc zostanie przeanalizowany po załadowaniu kart.

Alternatywą byłoby zmodyfikować funkcję zwaną gdy AJAX jest udany i dodać

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

do końca to - znowu będzie to upewnij się, że kod jest uruchamiany dopiero po zawartość zostały załadowane.

+0

dzięki Basiclife, nie jestem ekspertem js, więc zapłaciłem niezależny programista do budowania tego kodu, a on odpowiada na moje e-maile i utknął w ten sposób – ihab

+1

Ok ... Krótko mówiąc istnieją 2 główne rzeczy, które robisz 1: definiowanie funkcji uruchamianych po uruchomieniu i 2: załączanie funkcje do wyzwalaczy. Standardowy sposób uruchamiania kodu JQuery jest wtedy, gdy dokument jest gotowy - tzn. Kiedy strona jest w większości załadowana. To zdarzenie jest uruchamiane tylko raz i nie będzie ponownie uruchamiane po załadowaniu zawartości do elementu div. Czy możesz pokazać, że JS ładujesz do div, który nie działa i możemy przejść od tego ... – Basic

+0

ok, w nagłówku strony głównej mam załączone jquery.js i jquery-tabs.js. i na stronie ładującej wewnątrz div mam html dla kart. próbowałem również dołączyć jquery.js i jquery-tabs.js do załadowanej strony, ale nadal nie działa – ihab

7

Ponieważ już używasz jQuery, powinieneś rozpocząć refaktoryzację, która będzie bardziej czytelna, a przez to łatwiejsza w utrzymaniu. Warto zauważyć, że można porzucić tę funkcję ładowania i wprowadzenie wzór podobny do tego:

$(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; 
    }); 
}); 
Powiązane problemy