2009-08-27 15 views
0

我希望有人能夠包含我的一個JS文件,它能夠做一些簡潔的事情。我以爲自己像谷歌一樣把它放在一邊:你在源代碼中放置了一個腳本標籤,谷歌js負責處理所有事情。 在我的PHP文件是這樣的:Javascript getElementById在單獨的JS文件中,使用javascript編寫的src

echo '<script type="text/javascript" 
src="http://www.site.com/gadget.js"> 
</script>'; 

我認爲gadget.js,我寫了一個跨度:

document.write('<span id="GadgetPicture>'); 
document.write('</span>'); 
window.setTimeout('refreshImage();', 2000); 

在refreshImage功能,我想引用我跨度:

​​

但它給我空... 有誰知道爲什麼?

也,document.getElementById("body")也給null。

Michel

+2

除了getElementById(「body」),腳本中的所有內容都應該正常工作。我會使用'window.setTimeout(refreshImage,2000)'(call be reference),但除此之外它應該可以工作,並且在我的測試中運行良好。你能告訴我們一個運行這段代碼的例子嗎? – Guss 2009-08-27 12:21:55

+2

'document.getElementById(「body」)''是沒有意義的,除非你有'id =「body」'的元素。 – SilentGhost 2009-08-27 12:22:24

+0

永遠不要在setTimeout()中使用字符串。您可以使用函數名稱(請參閱Guss的評論)。這裏有太多糟糕的JavaScript教程,我想你會發現其中的一個(甚至w3schools上的教程鼓勵使用字符串)。 – bandi 2009-08-27 12:31:03

回答

1

對於你錯過了像<span>中的引用,就像大家所說的一樣,你不應該使用document.write在頁面上創建新的元素,就像Greg所說的使用createElement和appendElement一樣;

var span = document.createElement('span'); 
span.id = 'GadgetPicture'; 

document.appendChild(span); 

你也可以使用jQuery和HTML輔助http://docs.jquery.com/Attributes/html#val

而且在你setTimeout方法,你應該使用它像;

setTimeout(function() { refreshImage(); }, 2000); 

setTimeout(refreshImage, 2000); 

聲明一個字符串將導致JavaScript上的內容使用eval

您可以通過getElementsByTagName獲得文檔正文,因爲body標籤通常不具有ID。

document.getElementsByTagName("body")[0] 

您可以安全地假設,第一個找到的元素將是你的身體後,由於有多個頁面是無效的HTML。

+0

非常感謝,報價做了詭計(雖然真的讓我惱火,試了101件事,但忘了看報價......)。更改函數本身的函數名稱,然後嘗試createelement代碼。 – Michel 2009-08-27 13:50:28

0

您可以在不使用document.write方法的情況下在您的身體中追加一個span元素。 document.write不是將元素插入DOM的正確方法。

任何在頁面完成加載後運行的document.write語句都會創建一個新頁面並覆蓋當前頁面的所有內容。

您可以使用這樣的

appendChild

方法。

6

你缺少一個報價:

document.write('<span id="GadgetPicture">') 

它通常最好使用DOM方法(的createElement,使用appendChild),比文件撰寫,但它應該仍然工作。

相關問題