2017-04-23 124 views
0
<script language="javascript"> 
var slideIndex = 0; 
showSlides(); 

function plusSlides(n) { 
    showSlides(slideIndex += n); 
} 

function currentSlide(n) { 
    showSlides(slideIndex = n); 
} 

function showSlides() { 
    var i; 
    //var slides = document.getElementsByClassName("mySlides"); 
    var slides = document.getElementsByClassName("col", "div", document.getElementById("mySlides")); 
    for (i = 0; i < slides.length; i++) { 
     slides[i].style.display = "none"; 
    } 
    slideIndex++; 
    if (slideIndex> slides.length) {slideIndex = 1} 
     slides[slideIndex-1].style.display = "block"; 
    setTimeout(showSlides, 2000); // Change image every 2 seconds 
} 
</script> 

我已經在我的HTML中編寫了此JavaScript,並且它可以正常工作。但是,當我運行它HTA文件,覆蓋style.display屬性時無法獲取未定義或空引用的'樣式'

在行

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

「覆蓋style.display屬性時無法獲得的未定義或空引用 ‘風格’」但它確實會拋出錯誤在行不會引發錯誤

slides[i].style.display = "none"; 
+0

如果'getElementsByClassName'返回一個空的HTML集合,則此處的代碼看起來像會引發錯誤。 「幻燈片」的「長度」是多少? – Vestride

+1

檢查salides.length是否爲0.您正在重置slideIndex爲1.這可能會導致未定義的 – Juan

+1

'document.getElementsByClassName(「col」,「div」,document.getElementById(「mySlides」))'似乎是錯誤的 – brk

回答

1

我看到感興趣的有兩件事情在這裏:

1)它看起來像是將應用程序邏輯(HTML)與行爲邏輯(JavaScript)混合在一起。您應該考慮將此JS代碼放入一個文件中,並使用直接位於</body>標記上方的<script type="text/javascript" src="filename.js"></script>來調用它。這將在頁面加載後運行代碼,因此元素將在腳本運行之前呈現。如果您的當前腳本位於使用id=mySlides呈現元素的代碼之上,則可能會返回未定義的代碼。這樣做會使您的代碼更加模塊化,更易於閱讀和維護。

2)我從來沒有見過這種語法:document.getElementsByClassName("col", "div", document.getElementById("mySlides"));。我會認爲這是高度懷疑的,因爲我沒有看到任何提及:https://developer.mozilla.org/en/docs/Web/API/Document/getElementsByClassName。我建議在那裏重構你的代碼。 3)如果你看到undefined,slides.length可能是0,並且在我看來,如果你想要找到所有的<div>標籤,它可能與您的getElementById用法有關。嘗試在var slides =部分下方添加右下角:console.log("Number of elements found: " + slides.length);

+1

感謝您的回答....第2點解決了我的問題。@ agm1984 –

相關問題