for循环不会进入,不知道为什么

时间:2016-12-06 13:12:35

标签: javascript loops slideshow

我正在尝试创建一个移动的图像库,图像每4秒滚动一次。

我正确链接到javascript,我很确定。

这是javascript,我想知道它有什么问题。

var slideIndex = 0;
image();

function image() {
  alert("Entered Function");

  var i;
  var x = document.getElementsByClassName("slideshow");
  for (i = 0; i < x.length; i++) {
    x[i].style.display = none;
    alert("Entered Loop");
  }
  slideIndex++;
  if (slideIndex > x.length) {
    slideIndex = 1;
  }
  x[slideIndex-1].style.display = "block";
  setTimeout(image, 4000);
}

有什么想法吗?谢谢

编辑:style.display = none周围缺少的引号不是问题。我只是忘了在测试代码后添加它们。

2 个答案:

答案 0 :(得分:2)

原因是,当执行脚本时,元素不存在。我相信,您正在加载元素之前执行脚本方式。有两种方法可以解决这个问题:

  1. 使用onload eventListener。
  2. 加载元素后加载脚本。
  3. 此外,如果您检查控制台,代码中会出现错误。 = none;不正确。它应该是一个字符串。将行更改为:

    x[i].style.display = "none";
    

    此处的代码段演示了如果在加载元素后加载脚本,它可以正常工作。

    &#13;
    &#13;
    <div class="slideshow">Slide 1</div>
    <div class="slideshow">Slide 2</div>
    <div class="slideshow">Slide 3</div>
    <div class="slideshow">Slide 4</div>
    <div class="slideshow">Slide 5</div>
    <script>
    var slideIndex = 0;
    image();
    
    function image() {
      alert("Entered Function");
    
      var i;
      var x = document.getElementsByClassName("slideshow");
      for (i = 0; i < x.length; i++) {
        // Error here:
        x[i].style.display = "none";
        alert("Entered Loop");
      }
      slideIndex++;
      if (slideIndex > x.length) {
        slideIndex = 1;
      }
      x[slideIndex - 1].style.display = "block";
      setTimeout(image, 4000);
    }
    </script>
    &#13;
    &#13;
    &#13;

    您可以看到上面的代码按预期工作。

答案 1 :(得分:0)

当你设置display property时出现问题:

将此x[i].style.display = none;更改为x[i].style.display = 'none';,否则会收到类似ReferenceError: none is not defined的错误,导致警报无法解除:

    var slideIndex = 0;
    image();

    function image() {
      alert("Entered Function");

      var i;
      var x = document.getElementsByClassName("slideshow");
      for (i = 0; i < x.length; i++) {
        x[i].style.display = 'none';
        alert("Entered Loop");
      }
      slideIndex++;
      if (slideIndex > x.length) {
        slideIndex = 1;
      }
      x[slideIndex-1].style.display = "block";
      setTimeout(image, 4000);
    }
<div class='slideshow'></div>
<div class='slideshow'></div>
<div class='slideshow'></div>