2009-09-09 64 views
1

这是我一直要求实现与JavaScript的的getElementById()令人沮丧的问题

http://sandbox.leigeber.com/slideshow/

我切碎,改变它非常轻微,因此会融入新网站的模板库系统更容易一点。

每当我运行它,这条线会导致错误

ta=document.getElementById(thumbid); 

话说ta为空。我知道thumbid var的值确实存在为无序列表的ID。

我试图弄清楚现在至少半个小时里发生了什么事情,而且似乎无法完成它!

有人可以告诉我我做错了什么吗?

+0

我得到的错误是't = ta.getElementsByTagName('li');' – nickf 2009-09-09 03:23:50

回答

2

是的代码看起来很好,并从Firebug控制台运行相同的行工作正常,所以它让我想知道thumbs元素是否在运行时实际存在?它是否在document.ready样式处理程序中?如果在该页面上存在该元素之前调用它,则ta将为空,这会产生该错误。

0

这是有点不清楚thumbid应该有什么值,但它看起来像你的问题是你的无序列表中的li项目没有id s,他们有value s。

调用document.getElementById('thumbs')正常工作以获取列表本身的ul元素。

0

在Safari 4第19行向我投掷了一个关于ta的类型错误,它是null
这是由于您指定ta被分配的行。

我喜欢你如何将函数封装在闭包中,但我认为window.onload可以更改为更多jQuery like;同样可以说你正在寻找的selecting the elements,像t=$('ul#thumbs li')应该做的伎俩。我不知道在ta之前投掷var是否会解决任何问题,但值得一试。

+0

如果我使用jQuery选择器,但是本机JS方法是否会返回jQuery对象?我不这么认为...... – alex 2009-09-10 01:10:22

2

它看起来像幻灯片放映功能过早调用初始化。这将在DOM树准备就绪之前调用:

var slideshow = function() { 
... 
}(); 

尝试在最后删除那个()。

+0

我认为这是正确的。最简单的解决方案可能是将脚本引用移动到页面底部,并保持原样。无论如何,这应该会改善初始页面加载时间。 – 2009-09-09 03:47:41

+0

我错过了自运行功能括号! – alex 2009-09-09 03:53:40

+0

+1有帮助的答案 – alex 2009-09-09 03:56:54

2

好消息! jQuery是用vanilla Javascript编写的!你应该能够复制他们的方法来获取元素的ID并使用它。