javascript无法在第二页上运行

时间:2012-06-11 21:17:36

标签: javascript

我正在我的一个页面上实现图像旋转器,但是我想在其他两个页面上重新使用该代码。我还希望每个页面以不同的顺序将图像旋转到其他页面。我认为这是通过声明不同的数组并使用唯一ID来调用它们。

代码如下

 var ImageArr1 = new Array("/assets/function.jpg","assets/takeaway.jpg","/assets  /delivery.jpg");
 var ImageHolder1 = document.getElementById('Rotating1');


 var ImageArr2 = new Array("/assets/takeaway.jpg","/assets/function.jpg","/assets/delivery.jpg");
 var ImageHolder2 = document.getElementById('Rotating2');

  function RotateImages(whichHolder,Start)
  {
  var a = eval("ImageArr"+whichHolder);
   var b = eval("ImageHolder"+whichHolder);
  if(Start>=a.length)
  Start=0;
  b.src = a[Start];
  window.setTimeout("RotateImages("+whichHolder+","+(Start+1)+")",3000);
  }

  RotateImages(1,0);
  RotateImages(2,0);

我的HTML如下 - Page1

<img src="/assets/function.jpg" name="Rotating" id="Rotating1" width="260" height="180" alt="">

第2页

<img src="/assets/takeaway.jpg" name="Rotating" id="Rotating2" width="260" height="180" alt="">

我正在慢慢学习Javascript,但这让我感到难过

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

你遇到的问题实际上是一个错误。通过调用b.src,您断言b已定义但您的ImageHolder可能不在那里。特别是通过调用RotateImage(第1页上的2 ...或第2页上的RotateImage(1 ...)。

你可能尝试的第一件事就是从大脑中移除eval。你可以简单地使用窗口[“ImageArr”+ whichHolder],它会好得多。

接下来,用

替换你的函数的结尾(最后两行)
if(b) {
    b.src = a[Start];
    window.setTimeout("RotateImages("+whichHolder+", "+(Start+1)+")", 3000);
}

接下来,您可以学习使用函数而不是字符串调用setTimeout:

window.setTimeout(function() {
    RotateImages(whichHolder, Start+1);
}, 3000);

最后,它是更多的代码约定,经典变量和函数没有首字母大写。所以它可能是rotateImages并开始。