2011-08-31 7 views
2

이 스크립트는 waterbirds.org에서 수년 동안 실행되었습니다. 이제 그것은 어떤 이유로 부러졌습니다. "정의되지 않은"src의 '속성을 읽을 수 없습니다. "오류가 발생하고 이미지 링크 주소를 넣을 수 있기 때문에 문제로 preLoad [j] .src (첫 번째 줄은 runSlideShow 함수)로 추적했습니다. . 문제의 원인은 무엇입니까?자바 스크립트 배열 문제 : 정의되지 않은 'src'속성을 읽을 수 없습니다.

// Waterbird Society Theme for Wordpress 
// Rotating image banner applet 
// 
// Usage: 
//<body onLoad='rotate_banner(slideShowSpeed, "Image1.jpg", "Image2.jpg"...)'> 



var slideShowSpeed; 
var j = 0; 
var p; 
var preLoad = new Array(); 

function rotate_banner() { 
    var args = rotate_banner.arguments; 
    slideShowSpeed = Number(args[0]); 
    p = args.length; 
    for (i = 0; i < p-1; i++) { 
     preLoad[i] = new Image(); 
     preLoad[i].src = args[i+1]; 
    } 
    runSlideShow(); 
} 

function runSlideShow() { 
    document.images['SlideShow'].src = preLoad[j].src; 
    j++; 

    if (j > (preLoad.length - 1)) j = 0; 

    t = setTimeout('runSlideShow()', slideShowSpeed*1000); 
} 
+0

당신이 디버깅 할 때, preLoad에 값을 채우고 있습니까? 포함하고있는 이미지의 수를 계산할 수 있습니까? 해당 배열이 비어 있으면 색인을 생성하면 오류가 발생합니다. – tomasmcguinness

+0

세부 사항 ... i와 t 변수를 "var"하십시오. –

+0

크롬과 FF6에서 모두 잘 작동합니다. – TheVillageIdiot

답변

1

모두는 전 세계적으로 실행하여 모든 var 선언은 글로벌 변수를 생성하기위한 제외한 코드 괜찮아. waterbirds.org에

정확한 문제는 j 변수가 이전과는 j96 동일하고, preload[96] 정말 정의되지 preLoad[j]에 오는 순간에 의해 어딘가에 정의되어 있다는 점이다.

하기 위해, 예를 들어, 익명 자동 실행 기능에 배너를 감싸고 지역 바르, 당신은 완료 :

(function(){ 

var slideShowSpeed; 
var j = 0; 
var p; 
var preLoad = new Array(); 

// to keep rotate_banner global, save it as a property of window object 
window.rotate_banner = function() { 
    var args = rotate_banner.arguments; 
    slideShowSpeed = Number(args[0]); 
    p = args.length; 
    for (i = 0; i < p-1; i++) { 
     preLoad[i] = new Image(); 
     preLoad[i].src = args[i+1]; 
    } 
    runSlideShow(); 
} 

function runSlideShow() { 
    document.images['SlideShow'].src = preLoad[j].src; 
    j++; 

    if (j > (preLoad.length - 1)) j = 0; 

    t = setTimeout('runSlideShow()', slideShowSpeed*1000); 
} 

})() 

그리고 기억 global variables are evil! =)

+0

고마워요, 고쳐주세요! 동일한 메소드를 사용하여 다른 함수를 전역으로 만들 필요가 있습니다. window.runSlideShow() = function() {'그러나 이제는 매력처럼 작동합니다! 나는 너를 업 그레 이드하고 싶지만 분명히 내 평판이 15 세 이상이 될 때까지 나는 할 수 없다 ... 미안해. –

관련 문제