-2

我正在尝试在 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>

感谢 TJCROWDER 让我直截了当!!!

4

1 回答 1

3

有两个问题。

导致您提到的错误的原因在这里:

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

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

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

所以:

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

其他一些注意事项:

  • 您正在setTimeout循环设置,因此您安排此发生 10 次。但是这 10 次都会一个接一个地发生,一秒钟后,它们都会做完全相同的事情:将背景图像设置为arr[0] 当时的任何内容。您之前更改了 10 次数组的顺序这一事实没有任何区别,因为该函数arr[0]在您安排它时没有收到 的值的副本,它会收到对它使用的数组的持久引用当它运行时。更多:闭包并不复杂

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

于 2012-11-24T07:57:06.153 回答