第一次调用 Javascript 函数时效果不佳

标签 javascript html css

我主要是想在我的页面上使用这段代码: https://www.w3schools.com/w3css/tryit.asp?filename=tryw3css_slideshow_dots2

问题是我想创建那个幻灯片,但结果是当我第一次加载页面时,没有图像显示。当我点击圆圈时,会出现一个图像,一切正常。我收到以下错误:

Uncaught TypeError: Cannot read property 'style' of undefined
   at showDivs (details.js:26)
   at details.js:2

这是幻灯片的代码片段:

        <div class="w3-content w3-display-container" style="max-width:800px">
          <img class="mySlides" src="<c:url value="/resources/pics/casa1.jpg" />" style="width:100%">
          <img class="mySlides" src="<c:url value="/resources/pics/casa2.jpg" />" style="width:100%">
          <img class="mySlides" src="<c:url value="/resources/pics/casa3.jpg" />" style="width:100%">
          <img class="mySlides" src="<c:url value="/resources/pics/casa4.jpg" />" style="width:100%">
          <div class="w3-center w3-container w3-section w3-large w3-text-white w3-display-bottommiddle" style="width:100%">
            <div class="w3-left w3-hover-text-khaki" onclick="plusDivs(-1)">&#10094;</div>
            <div class="w3-right w3-hover-text-khaki" onclick="plusDivs(1)">&#10095;</div>
            <span class="w3-badge demo w3-border w3-transparent w3-hover-white" onclick="currentDiv(1)"></span>
            <span class="w3-badge demo w3-border w3-transparent w3-hover-white" onclick="currentDiv(2)"></span>
            <span class="w3-badge demo w3-border w3-transparent w3-hover-white" onclick="currentDiv(3)"></span>
            <span class="w3-badge demo w3-border w3-transparent w3-hover-white" onclick="currentDiv(4)"></span>
          </div>
        </div>

还有我的 details.js

    var slideIndex = 1;
    showDivs(slideIndex);


    function plusDivs(n) {
      showDivs(slideIndex += n);
    }

    function currentDiv(n) {
      showDivs(slideIndex = n);
    }

    function showDivs(n) {

      var i;
      var x = document.getElementsByClassName("mySlides");
      var dots = document.getElementsByClassName("demo");
      if (n > x.length) {slideIndex = 1}    
      if (n < 1) {slideIndex = x.length}
      for (i = 0; i < x.length; i++) {
         x[i].style.display = "none";  
      }
      for (i = 0; i < dots.length; i++) {
         dots[i].className = dots[i].className.replace(" w3-white", "");
      }
      x[slideIndex-1].style.display = "block";  
      dots[slideIndex-1].className += " w3-white";
    }

最佳答案

当您在这里直接调用您的脚本代码时,您的文档可能没有完全加载,因此找不到该元素。尝试在页面加载完成后运行您的代码,如下所示:

  window.addEventListener('load', function() {
     var slideIndex = 1;
      showDivs(slideIndex)
    };

    function plusDivs(n) {
      showDivs(slideIndex += n);
    }

    function currentDiv(n) {
      showDivs(slideIndex = n);
    }

    function showDivs(n) {

      var i;
      var x = document.getElementsByClassName("mySlides");
      var dots = document.getElementsByClassName("demo");
      if (n > x.length) {slideIndex = 1}    
      if (n < 1) {slideIndex = x.length}
      for (i = 0; i < x.length; i++) {
         x[i].style.display = "none";  
      }
      for (i = 0; i < dots.length; i++) {
         dots[i].className = dots[i].className.replace(" w3-white", "");
      }
      x[slideIndex-1].style.display = "block";  
      dots[slideIndex-1].className += " w3-white";
    }

关于第一次调用 Javascript 函数时效果不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52131428/

相关文章:

javascript - 测试嵌套对象中的所有叶属性是否为 true

html - css 网格元素定位

Javascript 多用户访问混淆

CSS 老虎机风格动画 : How Can I Make It Smooth And Stop After A Certain Amount Of Time?

javascript - Marionette:基于路由正则表达式启动和停止模块

javascript - 使用 javascript 和 html 选择第二个选项后发出警报

javascript - 在浏览器的星形图标或书签 Logo 上添加事件监听器

html - CSS Sprites - 仅使用一张图像作为元素的一部分的背景

html - Flexbox 挑战 : how to get row wrapping with children identical and uniform margins in full rows

javascript - 使用 jQuery 但具有同一类的多个元素设置元素的 html 内容