2009-09-09 90 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並使用它。