I am unable to resolve this error; I’ve been “fighting” to solve it for two days.
This is the error:
215: Uncaught TypeError: Cannot read properties of undefined (reading ‘style’) at showSlides
var slideIndex = 1; var outerXmlhttp = new XMLHttpRequest(); var url = "https://wjko8t4509.execute-api.us-east-2.amazonaws.com/books"; outerXmlhttp.onreadystatechange = function () { var innerXmlhttp; if (this.readyState == 4 && this.status == 200) { var allbook = JSON.parse(this.responseText); for (var i = 0, len = allbook.Items.length; i < len; i++) { id = allbook.Items[i].id document.querySelector('.slideshow-container').innerHTML += ` <div class="mySlides fade"> <div class="numbertext">${i+1}/${allbook.Items.length}</div> <img id="img" src onerror="this.onerror=null; this.src=myFunction(id);" style="width:100%"> <div class="text" id="title" onclick="myFunction(id)"></div> </div>`; document.querySelector('#punt').innerHTML += ` <span class="dot" onclick=currentSlide(${i+1})></span>`; myFunction(id); } } }; outerXmlhttp.open("GET", url, true); outerXmlhttp.send(); showSlides(slideIndex); function plusSlides(n) { showSlides(slideIndex += n); } function currentSlide(n) { showSlides(slideIndex = n); } function showSlides(n) { var i; var slides = document.getElementsByClassName("mySlides fade"); var dots = document.getElementsByClassName("dot"); if (n > slides.length) { slideIndex = 1 } if (n < 1) { slideIndex = slides.length } 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"; } function myFunction(id) { var url1 = "https://wjko8t4509.execute-api.us-east-2.amazonaws.com/books/" + id; innerXmlhttp = new XMLHttpRequest(); innerXmlhttp.onreadystatechange = function () { if (this.readyState == 4 && this.status == 200) { var myArr = JSON.parse(this.responseText); document.getElementById("img").src = "book_img/" + myArr.Item.immagine; document.getElementById("title").innerHTML = `<a href="fragmentProva.html?id=${id}">${myArr.Item.titolo}</a>`; } }; innerXmlhttp.open("GET", url1, true); innerXmlhttp.send(); }
<div class="slideshow-container" id="slideshow"> <a class="prev" onclick="plusSlides(-1)">❮</a> <a class="next" onclick="plusSlides(1)">❯</a> </div> <br> <div id="punt" style="text-align:center"> </div>
I would not like there to be some setup problem regarding the querySelector or the function call. I need your help, help me please!
Advertisement
Answer
showSlides
runs before the mySlides
container is populated from outerXmlhttp
try calling showSlides
from outerXmlhttp
showSlides(slideIndex); myFunction(id);