2010-12-18 52 views
13

我有一個問題,讓JavaScript代碼工作在一個AJAX加載的div內,我想包括jquery選項卡,但它不工作,ajax只輸出文本,並不會識別JavaScript的。你能幫忙的話,我會很高興。JavaScript不工作內部AJAX加載DIV

這裏是我的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}); 
} 

和HTML:

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


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

只是爲了信息,它的JavaScript,而不是Java腳本:) – dheerosaur 2010-12-18 03:50:30

回答

9

我沒有檢查所有的代碼,但您使用的觸發加載到你的DIV的javacript什麼?窗口/文件在最初加載頁面就緒功能纔會觸發一次......

嘗試像加載到div的內容如下......

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

注意腳本標記是在最後,所以它將在加載標籤後被解析。

另一種方法是修改調用的函數,當AJAX是成功的,並添加

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

到它的結束 - 再次,這將確保內容已經被加載之後才運行代碼。

+0

感謝Basiclife,我不是一個JS專家,所以我付出了自由程序員建立這個代碼,他沒有回覆我的電子郵件,讓我像這樣卡住 – ihab 2010-12-18 01:42:49

+1

好的...長話短說有2個主要的東西你正在做1:定義函數觸發時運行和2:附加這些函數觸發。標準的JQuery運行代碼的方式是當文檔準備就緒時 - 即當頁面大部分被加載時。此事件只會觸發一次,並且在將內容加載到div時不會再次觸發。你可以顯示你正在加載到不工作的div的JS,我們可以從那裏去... – Basic 2010-12-18 01:48:51

+0

沒問題,在主頁面的標題中,我附加了jquery.js和jquery-tabs.js。並在頁面加載內部div我有標籤的HTML。我也試圖在加載的頁面中包含jquery.js和jquery-tabs.js,但仍然不起作用 – ihab 2010-12-18 01:55:06

7

由於您已經在使用jQuery,因此您應該開始重構,使其更具可讀性,因此更易於維護。值得注意的是,你能夠擺脫那個負載功能,並納入一個類似的模式:

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