Не можете передать HTML Collection в качестве параметра в функцию Js? - PullRequest
0 голосов
/ 30 августа 2018

Я изучал слайд-шоу в w3schools, чтобы научиться создавать свои собственные.

Это ссылка на код руководства . Однако я имею в виду этот код.

<script>
  var slideIndex = 0;
  showSlides();

function showSlides() {
  var i;
  var slides = 
document.getElementsByClassName("mySlides");
var dots = document.getElementsByClassName("dot");
for (i = 0; i < slides.length; i++) {
   slides[i].style.display = "none";  
}
slideIndex++;
if (slideIndex > slides.length) {slideIndex = 1}    
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";
setTimeout(showSlides, 2000); // Change image every 
2 seconds
}
</script>

Я хотел сделать несколько слайд-шоу для одной страницы, поэтому я сделал так, чтобы этот раздел кода принимал параметр, а затем я мог просто вставить свой список изображений. Но когда я изменил код на этот ...

 var images = document.getElementsByClassName("mySlides");
var imageNum = document.getElementsByClassName("dot");

showSlides(images, imageNum);

function showSlides(slides, dots) {
    var i;

for (i = 0; i < slides.length; i++) {
   slides[i].style.display = "none";  
}
slideIndex++;
if (slideIndex > slides.length) {slideIndex = 1}    
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";

    setTimeout(showSlides, 2000);
}

Полный код доступен по этой ссылке.

Это дает мне свойство error длины undefined, хотя .length можно использовать в HTML-коллекции.

Почему кажется, что эта функция не может принимать HTML-коллекцию в качестве параметра?

Редактировать: Посмотрев на отзывы и заметив, что людям стало сложнее помогать мне, я создал коды и поле , связывающие с моей проблемой. Я включил решение в качестве комментария, чтобы люди могли видеть до и после. Я также включил всю функцию выше.

Спасибо за ваш отзыв, чтобы я мог сделать вопросы более понятными и извините за проблемы!

1 Ответ

0 голосов
/ 30 августа 2018

Это из-за этой строки в конце функции

setTimeout(showSlides, 2000); // Change image every 2 seconds

это вызов showSlides без аргументов

Чтобы добавить аргумент для вызова, вы можете сделать:

setTimeout(() => { showSlides(slides, dots) }, 2000);
// call from an anonymous function

// or

setTimeout(showSlides, 2000, slides, dots); 
// use additional params of setTimeout

Вот документ для setTimeout

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...