2009-08-27 41 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),比文件撰写,但它应该仍然工作。