2012-11-16 70 views
1

我試圖加載從initial.html不同的HTML頁面與另一頁:負載與DOM改變

$("#hidden_demo_div").load("modules/another.html", function (data) { 
    var value = $(data).filter("#demo_div"); 
    var html = value.html(); // THERE IS NO <strong>Hello</strong> here!!! 
} 

這裏從another.html

<html> 
    ......................... 
    <head> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      anotherMethodInvocation(); 
     }); 
    </script> 
    </head> 

    <div id="demo_div"></div> 
</html> 

下一個片段在JS爲another.html我有:

function anotherMethodInvocation() {  
    $("#demo_div").append("<strong>Hello</strong>"); 
} 

所以問題是爲什麼我得到(在我的負載回調函數)只是靜態的HTML,但沒有改變?

UPDATE 1:

一) 「#hidden_​​demo_div」 位於initial.html(HTML其中具有.load JS代碼鏈接)。 這個元素是在BODY聲明:

B)如果我把在BODY (一個HTML文件,它甚至不工作)

<div id="hidden_demo_div"></div> 

和 (到另一個HTML文件)

<div id="demo_div"></div> 

在身體。

+0

你沒有頭部後** ** 標籤。 – Bruno

+0

你的結構看起來如何?我的意思是你的文件和這個方法在哪裏運行? –

+0

請提供一些關於具有anotherMethodInvocation()的JS的更多信息。它是否在索引html或another.html中鏈接? – roncsak

回答

0

意識到當加載遠程頁面時,主頁面已經發生了事件,這一點很重要。這意味着在遠程頁面中包裝在$(document).ready(function() {}中的代碼將立即觸發。

如果遠程文件中的代碼位於HTML之前,則表示它不會找到該HTML,因爲它在代碼觸發時不存在。

試試這個結構在遠程頁面:

<div id="demo_div"></div> 
<!-- "demo_div" now exists , can run code on it --> 
<script type="text/javascript">    
     anotherMethodInvocation(); 

</script> 
+0

'$(document).ready'等同於設置一個短暫超時,如果文檔在調用時已經準備就緒,它將不會同步運行。請參閱https://github.com/jquery/jquery/blob/master/src/core.js#L845 – Esailija

+0

@Esailija不是當它在ajax加載的頁面中使用時...''已準備好''已經發生 – charlietfl

+0

沒有..腳本可以放在頭部或身體中。正如我已經表明的,你需要將代碼放在html後面的代碼中。 – charlietfl