2012-07-03 21 views
4

나는 한동안 다양한 무생물에 맞서 머리를 숙였습니다. jQuery를 사용하여 프로모션 배너 회전 작업을 만듭니다. 2 초마다 (앞으로 더 많이 변경할 예정이며, 테스트는 짧습니다) 이미지와 캡션이 바뀝니다.잡히지 않은 TypeError : 정의되지 않은 '0'속성을 읽을 수 없습니다.

이 동작은 잘 동작하며, 두 동작 사이를 회전하여 마지막 동작이되면 처음으로 돌아갑니다. 내가 하나를 클릭하고 처음으로 돌아갑니다 때 옆이 발생 회전하려고하지만, (아니면 명시 적으로 첫 번째 클릭) : 내 두 가지 기능에

Uncaught TypeError: Cannot read property '0' of undefined /ftwc/:178 
changeImage 
rotate 

합니다. 나는 이유를 이해할 수 없다!

changeImage = function(num) {   
    $(".currentpromoimage").before('<div class="promoimage newpromoimage" style="background: url(\''+images[num][0]+'\') no-repeat; z-index: 1;"><div class="caption" style="color: #'+images[num][2]+'">'+images[num][1]+'</div></div>'); 

    $(".currentpromoimage").fadeOut(700,function(){ 
     $(".newpromoimage").addClass("currentpromoimage"); 
     $(".newpromoimage").removeClass("newpromoimage"); 
     $(this).remove(); 
    }); 

    $(".newpromoimage").fadeIn(700); 

    $("#promoselect").children().children().css('background', '#303030'); 

    $("#ps_"+num).css('background', '#000000'); 

    currentImage = num; 

}; 

rotate = function() { 

    var imageLength = images.length-1; 

    if (currentImage == imageLength) { 
     changeImage("0"); 
    } else { 
     var nextImage = currentImage+1; 
     /*alert("nextImage:"+nextImage);*/ 
     changeImage(nextImage); 
    } 

}; 

var selectors = ""; 

var preloads = ''; 

for(var i=0;i<images.length;i++) { 
    preloads += '<img src="'+images[i][0]+'" alt="preloaded" class="preload">'; 

    selectors += "<li id=\"ps_"+i+"\"></li>"; 
} 

$("body").prepend(preloads); 

$("#grass").after('<div id="promo"><div id="promoselect"><ul></ul></div><div class="promoimage currentpromoimage" style="background: url(\''+images[0][0]+'\') no-repeat; z-index: 1;"><div class="caption" style="color: #'+images[0][2]+'">'+images[0][1]+'</div></div></div>'); 

    var currentImage = 0; 

    $("#promoselect").children().append(selectors); 

    $("#ps_0").css('background', '#000000'); 

    $("#promoselect") 
     .children() 
     .children() 
     .click(function() { 
      var selector = $(this).attr("id").split("_"); 

      clearInterval(autoimage); 

      changeImage(selector[1]); 

      autoimage = setInterval(rotate,2000); 
    }); 

    autoimage = setInterval(rotate,2000); 

이것은 JQuery와 문서 준비 함수 내 모든 호출 및 이미지로 json_encode를 사용 PHP에서 인코딩 된 어레이이다 : 여기

스크립트이다. 나는 그것이 순간적으로 지저분하다는 것을 압니다.하지만이 기능들이 정의되지 않은 것처럼 보이는 이유를 모르겠습니다.

고마워요!

+4

오류를 보여주는 JS 피들링을 설정할 수 있습니까? – Utkanos

답변

0

image 변수를 많이 사용하고 있지만 어디에도 정의하지 않았습니다. 첫 번째 줄의 오른쪽에 images[num]undefined으로, images[num][0]에 액세스 할 때 오류가 발생합니다.

+0

PHP로 인코딩 된 배열이고 이미지 자체가 성공적으로 변경되었으므로 이미지 배열에는 문제가 없다고 말했습니다. (붙여 넣은 코드에는 포함되어 있지 않습니다. 이미지 및 캡션 배열의 배열 일뿐입니다) – MarcusJohnson

+0

그 밖의 오류는 어디에서 얻을 수 있습니까? "num"은 배열의 존재하지 않는 인덱스입니다. – Bergi

+0

num은 함수에 전달되고 배열에서 사용되는 숫자입니다. 인스턴스가 작동하지 않는 경우 해당 숫자는 0입니다. 배열에 0, 1 및 2 (선택할 수있는 3 개의 이미지)라는 두 개의 인덱스가 있습니다. 인덱스 0을 선택하는 경우에만 발생합니다. 회전하지 못합니다. – MarcusJohnson

관련 문제