Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未捕获的TypeError:无法读取未定义的属性“0”_Javascript_Jquery_Undefined - Fatal编程技术网

Javascript 未捕获的TypeError:无法读取未定义的属性“0”

Javascript 未捕获的TypeError:无法读取未定义的属性“0”,javascript,jquery,undefined,Javascript,Jquery,Undefined,我的头撞在各种无生命的物体上已经有一段时间了。我正在使用jQuery创建一个宣传横幅旋转的东西。以后每隔2秒我会把它改成更多,只是为了测试它的长度,图像和标题会改变 这很好,它在它们之间旋转,当它到达最后一个,它回到开始。但当我点击其中一个,它返回到开头,或者我明确地点击第一个,当它下一次尝试旋转时,它抛出这个: Uncaught TypeError: Cannot read property '0' of undefined /ftwc/:178 changeImage rotate 关于我

我的头撞在各种无生命的物体上已经有一段时间了。我正在使用jQuery创建一个宣传横幅旋转的东西。以后每隔2秒我会把它改成更多,只是为了测试它的长度,图像和标题会改变

这很好,它在它们之间旋转,当它到达最后一个,它回到开始。但当我点击其中一个,它返回到开头,或者我明确地点击第一个,当它下一次尝试旋转时,它抛出这个:

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);
这都是在jquerydocumentready函数中调用的,images是一个使用json_encode从PHP编码的数组。我知道现在很混乱,但我就是不明白为什么这些函数看起来没有定义


谢谢

您经常使用image变量,但不要在任何地方或错误地定义它。就在第一行,images[num]的计算结果将为undefined,在访问images[num][0]时会抛出一个错误。

你能设置一个显示错误的JS小提琴吗?我说这是一个用PHP编码的数组,我还说图像会自动在它们之间成功更改,所以images数组没有问题。它不包括在粘贴的代码中,它只是一个图像和标题数组。那么,你还会从哪里得到这个错误呢?num将是数组中不存在的索引。num是传递给函数并在数组中使用的数字。在它不起作用的情况下,该数字为0。数组有两个索引,0、1和23个图像可供选择。只有在选择索引0时才会发生这种情况。然后旋转失败。事实上,这个数字是1。很抱歉,因为我已手动将其更改为0,所以它尝试转到下一个图像1,但在那里失败。没关系,我解决了它-基本上我得到了所单击的选择器的ID,该选择器包含它所属数组的索引,前面有ps_3;。我在下划线处拆分以获得右边的数字:ps_0将返回一个带有ps和0的数组。出于某种原因,JS可以将任何数字解析为字符串,将数组解析为索引,除0外,它可以工作,但0不能工作。我刚刚在changeImage函数的开头添加了parseIntnum,一切正常:Thnaks