2012-12-28 55 views
0

如果p標籤被置於上方和劇本下面放置負載的JavaScript

<p id="dom_intro">Hello</p> 

<script> 
x=document.getElementById("dom_intro"); 
document.write("<p>This is the text of dom intro" + x.innerHTML + "Howzzat </p>"); 
</script> 

如果在腳本被置於第一和HTML p標記相同的代碼被放置在下面的腳本工作完全正常下面的腳本這是行不通的,我得到錯誤x是null或undefined

<script> 
x=document.getElementById("dom_intro"); 
document.write("<p>This is the text of dom intro" + x.innerHTML + "Howzzat </p>"); 
</script> 

<p id="dom_intro">Hello</p> 

我試圖在外部粘貼腳本的JavaScript文件,並放置在頭部 我收到了同樣的錯誤。是否有任何JavaScript或jQuery腳本的HTML有rendred

回答

1

jQuery的後加載javascript文件:

$(document).ready(){function(){ 
//yourcode 

}); 

和JavaScript

window.onload=function(){ 
//your code 

} 

就緒jQuery的文件執行的功能,當DOM準備就緒,這意味着在下載一些圖像之前。

當頁面完全準備就緒時,即所有圖像完成加載時,會激發Window.onload。

+0

如上所述,我使用了window.onload,但腳本中的document.write覆蓋整個html頁面。我應該使用window.onload所有的功能,我delcare在我的JavaScript文件 – user1934140

+0

你不能使用document.write !!!!你不應該..閱讀一些關於JavaScript的書..更多,如果你已經開始..使用document.getElementById和innerHTML – geekman

1

一旦dom準備就緒,您需要訪問該元素。你得到這個錯誤是因爲你試圖在dom被加載之前訪問p標籤。

這可能會解決您的問題

window.onload = function(){ 
    // your javascript here 
    x=document.getElementById("dom_intro"); 
    document.write("<p>This is the text of dom intro" + x.innerHTML + "Howzzat </p>"); 

} 
+0

謝謝。 如上所述,我使用了window.onload,但腳本中的document.write覆蓋整個html頁面。我應該使用window.onload的所有功能,我delcare在我的JavaScript文件 – user1934140

+0

以及它的document.write..u不能這樣做..整個頁面將被重寫! – geekman

0

瀏覽器在渲染你的代碼,因爲他們看到它(lineary)。這裏的問題在於你的腳本試圖訪問一些不存在的東西,所以通常的做法是等到所有DOM元素準備好然後再執行腳本。

請看這裏:http://api.jquery.com/ready/

$(document).ready(function() { 
    // Handler for .ready() called. 
}); 

這等效於調用:

$(function() { 
// Handler for .ready() called. 
}); 
0

被執行的<腳本>內容放在什麼地方,所以在第二種情況下,你想在聲明之前使用「dom_intro」。但是你正在嘗試加載html之後呈現的javascript,所以你不想在html內容之前寫腳本,對吧?

加載JS文件的常用方法就在< /正文>關閉標記之前。這樣你就可以確保在加載所有HTML之前,不會下載任何html。

如果你想等待HTML執行任何JS之前完成加載,你必須做這樣的事情:

普通的JavaScript:

window.onload = function() { 
    // do_whatever_you_want 
} 

的Jquery:

$(document).ready(function() { 
    // do_whatever_you_want 
}