具有计时器功能的匿名函数辅助错误

时间:2012-11-24 07:55:20

标签: javascript html5 timer getelementbyid

我正在尝试在div中设置背景图像,以便使用setTimer()每秒或更换一次;我设置它,它说我有

  'Invalid left-hand side in assignment'

不确定我在做什么,这是错的。有人可以帮忙吗?

  <html><body>
  <div class="box">
   <div id="b1"></div>
  </div>
  <input id = 'spin' type="button" value="Spin" onclick='changeIcons()' />
  <script>
  var arr = new Array();
  arr[0] = '1.png';
  arr[1] = '2.png';
  arr[2] = '3.png';
  var first = document.getElementById('b1');

  function changeIcons(){
   for(var spinIcons= 0; spinIcons < 10; spinIcons++){
   arr.sort(function() {return 0.5 - Math.random()});
   var v1 = setTimeout(function(){first.style.background-image= 'url(arr[0])'},   1000);
}
  }
 </script> 
 </body>
 </html>

这最终结束了工作,它有时间问题,我需要为背景图片制作一个有框架的位置,但它正在工作:

     <div class="first"></div>
     <script>
     for(var i=0; i<11; i++){
        $("div.first").slideUp(300).delay(100).fadeIn(400);
     }
     </script>

感谢T.J.CROWDER设置我直接!!!

1 个答案:

答案 0 :(得分:3)

有两个问题。

导致你提到的错误的是:

//                                        here ------v
var v1 = setTimeout(function(){first.style.background-image= 'url(arr[0])'},   1000);

这使得引擎认为您正在尝试分配表达式(background - image)的结果,该表达式在赋值的左侧无效。在JavaScript中,属性名称中不能包含破折号。您可以使用camelCase版本backgroundImage代替。

另外,您始终将背景图像设置为字符串'url(arr[0])',而不是将arr[0]中的值设置为字符串。您需要调整报价:

所以:

var v1 = setTimeout(function(){first.style.backgroundImage= "url(" + arr[0] + ")"},   1000);

其他一些说明:

  • 您在循环中设置了setTimeout,因此您计划将其安排10次。但是那些10次将一个接一个地发生,一秒钟之后,他们都会做同样的事情:将背景图像设置为当时arr[0] 中的任何内容。你之前10次改变数组顺序这一事实没有任何区别,因为当你安排它时,该函数没有收到arr[0]值的副本,它接收对数组的持久引用,它在运行时使用。更多:Closures are not complicated

  • 对数组进行排序并使用索引0似乎是从数组中随机选取的一种相当低效的方法。