2012-03-26 4 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

+2

당신은 오타가 있습니다 : elment -> 요소 (그러나 이것은 어떤 문제의 근원이 아닙니다).그리고 당신은 또 다른 오자가 있습니다 : FECBOOK -> FACEBOOK (나는 ​​그 책을 읽고 싶지 않을 것입니다!) –

+0

아마도 "elment"는 실제 변수 "element"가되어야할까요? – theJollySin

답변

1

Ates와 Frederic은 모두 코드에 문제를 게시했습니다. 당신은 당신의 코드가 작동하는 것을 모두보고해야합니다 : 배열이 첫 번째 요소는 인덱스 0에 있다는 것을 의미 제로 색인 때문이다

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.lengthi < arr.length을 사용하는 이유도 우리 생각 첫 번째 요소라고합니다. 배열이 ['a', 'b', 'c'] 인 경우 세 개의 요소가 있지만 세 번째 요소는 인덱스 2입니다.

2

변경 :

i <= tweetlinks.length 

사람 :

i < tweetlinks.length 

귀하의 루프는 정의되지 않은 결과 배열을 넘어 가고있다 마지막 반복의 값. 배열 인덱스의 범위는 0부터 length - 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); 
} 

length에 모든 비교를하여 for 루프에 strictly less than (<) 대신 less than or equal to (<=)해야한다, 배열 인덱스가 제로이기 때문에 기반.

0

글쎄, 당신이 무엇인지 확인 했어 정말로 변수를 얻는 중 : tweetlinks 및 facelinks?

"정의되지 않은"개체의 "스타일"속성을 설정하고있는 것처럼 보입니다. 아마 그 배열에서 기대하는 것을 얻지 못할 수도 있습니다.

0

입력 오류가 있습니다. "elment"대신 "element"여야합니다.

+0

이것은 댓글이어야합니다. –

관련 문제