2017-01-16 217 views
0

我是JavaScript新手。我知道這個主題有幾個帖子,但我找不到能夠解決我的問題的帖子。getElementsByClassName返回undefined

我想更改類別爲mainSlidesdot的元素的屬性。但是當我嘗試使用getElementsByClassName調用這些元素時,它將返回undefined。

function showSlides(n) { 
    var i; 
    var slides = document.getElementsByClassName("mainSlides"); 
    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"; 

當我在var dots = document ...滑動插入斷點是未定義的。然後我在不確定

slides[slideIndex-1].style.display = "block";

無法讀取屬性 '風格' 得到一個錯誤的HTML看起來像這樣:

<div class="mainSlides fade"> 
     <div class="numbertext">1/3</div> 
     <img src="images/mainSlide1.jpg" style="width:100%"> 
     <div class="text">Caption Text</div> 
    </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> 

我m不知道我的問題是在設置課程還是使用getElementsByClassName

+1

如果'slides'是未定義那麼你會得到一個錯誤,試圖讀'slideIndex-1' o f未定義,而不是未定義的'style'。 – Quentin

+1

看起來'slides.length'是'0','slideIndex-1 === -1'。或者'n === 1'和'slideIndex'沒有設置。 – Oriol

+0

只是簡單的說明,您可能會遇到代碼中的問題,以便刪除「活動」類。你應該考慮使用'dots [i] .classList.remove(「active」)'來代替。 –

回答

0

您的代碼有一些邏輯問題:

  • 如果n > slides.lengthn >= 1,然後slideIndex = 1
    • 如果slides.length >= 1
      OK,那麼你可以使用slides[slideIndex-1]
    • 如果slides.length === 0
      問題,slides[slideIndex-1]undefined
  • 如果1 <= n <= slides.length,然後slideIndex未設置
    slides[slideIndex-1]可能是一個問題。
  • 如果n < 1,然後slideIndex = slides.length
    • 如果slides.length >= 1
      OK,那麼你可以使用slides[slideIndex-1]
    • 如果slides.length === 0
      問題,slides[slideIndex-1]undefined