Javascript 带有计时器函数的匿名函数辅助错误

Javascript 带有计时器函数的匿名函数辅助错误,javascript,html,timer,getelementbyid,Javascript,Html,Timer,Getelementbyid,我正在尝试使用setTimer()将div中的背景图像设置为每隔一两秒更改一次;我设置了它,它说我有 'Invalid left-hand side in assignment' 不确定我在做什么,那是错的。有人能帮忙吗 <html><body> <div class="box"> <div id="b1"></div> </div> <input id = 'spin' type="but

我正在尝试使用setTimer()将div中的背景图像设置为每隔一两秒更改一次;我设置了它,它说我有

  '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>

var arr=新数组();
arr[0]=“1.png”;
arr[1]=“2.png”;
arr[2]=“3.png”;
var first=document.getElementById('b1');
函数更改图标(){
对于(var spinIcons=0;spinIcons<10;spinIcons++){
arr.sort(函数(){return 0.5-Math.random()});
var v1=setTimeout(函数(){first.style.background image='url(arr[0])},1000);
}
}
这最终起作用了,它有时间问题,我需要为背景图像制作一个带框的占位符,但它起作用了:

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


对于(var i=0;i有两个问题

导致您提到的错误的原因如下:

//                                        here ------v
var v1 = setTimeout(function(){first.style.background-image= 'url(arr[0])'},   1000);
这会使引擎认为您正在尝试为表达式(
background-image
)的结果赋值,该表达式在赋值的左侧无效。在JavaScript中,属性名称不能包含破折号。您可以改用camelCase版本
backgroundImage

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

因此:

其他一些注意事项:

  • 您正在循环中设置
    setTimeout
    ,因此您计划了10次。但这10次都会在一秒钟后一次接一次地发生,它们都会做完全相同的事情:将背景图像设置为
    arr[0]中的任何内容
    当时。您之前将数组的顺序更改了10次,这一事实没有什么区别,因为函数在调度时不会收到
    arr[0]值的副本。
    在运行时会收到数组的持久引用。更多信息:

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


缺少传递给
setTimeout()
的函数的右括号。在我的实际脚本中,它就在那里……我在重新键入时刚好错过了它。@Verber:你为什么要“重新键入”?复制并粘贴,伙计,以避免浪费人们的时间(包括你自己的时间)。因为在我的实际代码中,循环中有更多的内容。我只是为这里的人们简化了它。所以当我复制和粘贴时,我省略了一些内容,只是重新键入了它。还需要更改为
'url('+arr[0]+')
@NathanWall:甚至可能是
url('+arr.pop()+'))“
或类似,否则它只会一直显示相同的image.naw,而不是原来的image.naw。我与以前有相同的错误。我不需要弹出,因为我在循环中有这个,并且正在使用arr.sort(function(){return 0.5-Math.random()});@Verber:我已经更新了答案,现在你已经更改了问题的代码。我只是把我丢失的大括号放进去了。谢谢你,但是当我回去检查时,我发现我的backgroundImage一开始就错了,所以我修复了这个问题以及字符串问题。我发现它不会赋值给空值,所以我的数组赋值有问题谢谢你的提示!
var v1 = setTimeout(function(){first.style.backgroundImage= "url(" + arr[0] + ")"},   1000);