2012-03-26 164 views
1

我得到一個錯誤「類型錯誤:無法讀取的未定義的屬性‘風格’」 我會很高興,如果你能不能幫我調試它:對象是不確定的,不知道爲什麼

var TWITTER = '"twitter"'; 
var FECEBOOK = '"facebook"'; 
var FACEBOOKicon = "https://s-static.ak.facebook.com/rsrc.php/yi/r/q9U99v3_saj.ico"; 
var TWITTERicon = "https://twitter.com/phoenix/favicon.ico"; 

var tweetlinks; 
tweetlinks = document.querySelectorAll('[href*=' + TWITTER + ']'); 
var facelinks; 
facelinks = document.querySelectorAll('[href*=' + FECEBOOK + ']'); 

function getLinks() { 
    for (var i = 0; i <= tweetlinks.length; i++) { 
     setBackground(tweetlinks[i], TWITTERicon); 
    } 

    for (var g = 0; i <= facelinks.length; g++) { 
     setBackground(facelinks[g], FACEBOOKicon); 
    }  

    function setBackground(elment, backimage) { 
     elment.style.backgroundImage = backimage; 
    } 
} 

getLinks(); 
+0

即使它們不是空的,我也無法遍歷'tweetlinks'和'facelinks' ... – user1294129 2012-03-26 22:37:35

+2

您有一個錯字:elment - >元素(但這不是任何問題的根源)。你還有另一個錯字:FECEBOOK - > FACEBOOK(我不想讀這本書!) – 2012-03-26 22:40:00

+0

也許「elment」應該是一個真正的變量「元素」? – theJollySin 2012-03-26 22:40:02

回答

1

Ates和Frederic都在代碼中發佈了問題。你需要看到這對你的代碼的工作:

var TWITTER = '"twitter"'; 
var FECEBOOK = '"facebook"'; 
var FACEBOOKicon = "https://s-static.ak.facebook.com/rsrc.php/yi/r/q9U99v3_saj.ico"; 
var TWITTERicon = "https://twitter.com/phoenix/favicon.ico"; 

var tweetlinks; 
tweetlinks = document.querySelectorAll('[href*=' + TWITTER + ']'); 
var facelinks; 
facelinks = document.querySelectorAll('[href*=' + FECEBOOK + ']'); 

function getLinks() { 
    for (var i = 0; i < tweetlinks.length; i++) { 
     setBackground(tweetlinks[i], TWITTERicon); 
    } 

    for (var g = 0; g < facelinks.length; g++) { 
     setBackground(facelinks[g], FACEBOOKicon); 
    }  

    function setBackground(elment, backimage) { 
     elment.style.backgroundImage = backimage; 
    } 
} 

getLinks(); 

您使用i < arr.length代替i <= arr.length的原因是因爲數組是零索引,這意味着第一個元素的索引爲0,即使我們稱其爲第一個元素。如果我們有一個數組['a', 'b', 'c'],它有三個元素,但第三個元素位於索引2處。

2

變化:

i <= tweetlinks.length 

要:

i < tweetlinks.length 

你環路超越陣列,從而導致未定義在最後一次迭代中的值。數組索引範圍從0到長度 - 1,而不是0到長度。

-1

看起來像在你的setBackground函數中,elment是未定義的,或者是null或者沒有任何內容。這可能是因爲你正在通過for循環來檢索索引。更改:

i <= facelinks.length 

要:

i < facelinks.length 
2

有在你的代碼各種錯誤。首先:你不想循環從0到< = .length,但是到< .length。其次,在第二個循環中,將g用作計數器變量,但與i相比較。

2

代碼中存在不匹配的循環變量。你應該寫:

for (var g = 0; g < facelinks.length; g++) { 
    setBackground(facelinks[g], FACEBOOKicon); 
} 

相反的:

for (var g = 0; i <= facelinks.length; g++) { 
    setBackground(facelinks[g], FACEBOOKicon); 
} 

而且,所有的比較來lengthfor循環應該是strictly less than<),而不是less than or equal to<=),因爲數組索引是從零開始基。

0

那麼,你有沒有檢查你是什麼真的獲取變量: tweetlinks和facelinks?

在我看來,你正在設置「未定義」對象的「風格」屬性。 也許你沒有得到你期望的那些數組。

0

有一個輸入錯誤。它應該是「元素」而不是「元素」。

+0

這應該是一條評論 – 2017-01-31 14:24:30

相關問題