let slideIndex = 1;
showSlides(slideIndex);
function plusSlides(n) {
showSlides(slideIndex += n);
}
function currentSlide(n) {
showSlides(slideIndex = n);
}
function showSlides(n) {
let i;
let slides = document.getElementsByClassName('mySlides');
let dots = document.getElementsByClassName('dot');
if (n > slides.length) {
slideIndex = 1;
}
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
for (i = 0; i < dots.length; i++) {
dots[i].className = dots[i].className.replace("active", "");
}
slides[slideIndex - 1].style.display = "block";
dots[slideIndex - 1].className += "active";
}
<div class="slideshow-container">
<div class="mySlides fade">
<img src="https://picsum.photos/200/300?grayscale" style="width: 100%">
</div>
<div class="mySlides fade">
<img src="https://picsum.photos/200/300" style="width: 100%">
</div>
<div class="mySlides fade">
<img src="https://picsum.photos/200/300?grayscale" style="width: 100%">
</div>
<a class="prev" onclick="plusSlides(-1)">❮</a>
<a class="next" onclick="plusSlides(1)">❯</a>
</div>
<div style="text-align:center">
<span class="dot" onclick="currentSlide(1)"></span>
<span class="dot" onclick="currentSlide(2)"></span>
<span class="dot" onclick="currentSlide(3)"></span>
</div>
caught TypeError: Cannot read properties of undefined (reading 'style')
at showSlides (sam.js:25:26)
at sam.js:2:1
5sam.js:26 Uncaught TypeError: Cannot read properties of undefined (reading 'className')
at showSlides (sam.js:26:9)
at plusSlides (sam.js:5:5)
at HTMLAnchorElement.onclick (VM229 index.html:1:1)
我试图改变类名,并删除JavaScript中的样式标签,这一行的一部分说它引起了问题。我想可能是css,所以我搞砸了css,导致它,但它仍然给出错误信息,有些时候,刷新浏览器时,没有图像显示,当我点击下一个箭头,它激活图像,并能够点击下一步和更改图像,但不知何故,它给予了错误,图像不会显示加载时,加载网站第一次或点击刷新
2条答案
按热度按时间mm5n2pyu1#
这两个操作比你想象的要多:
通过更改
className
(* 和 *)的整个文本,以一种您可能无意的方式更改它,请注意结果中缺少空格字符。..),您实际上修改了live HTML collection的结果:这意味着集合的 length 发生了变化。您可以通过将一些调试信息记录到控制台来观察这一点:
不直接替换
className
属性,而是使用theclassList
API:这将允许其余的类不受影响,从而不会影响您正在迭代的
HTMLCollection
对象。cngwdvgl2#
这里是你的解决方案,当添加一个新的类作为字符串使用时,确保在
dots[slideIndex - 1].className += " active";
中用空格分隔它们。另外,您没有检查slideIndex
是否小于1
,我在showSlides(n)
函数中添加了此条件。给你的代码一个建议: