2017-01-16 120 views
-1

HTML中的 'onClick':無法設置屬性未定義

<form class="hotels-filters"> 
    <div role="radio" aria-checked="false" tabindex="1" id="all" class="hotel-filter hotel-filter-reset hotel-filter-active">Reset filters</div> 
    <div role="radio" aria-checked="false" tabindex="1" id="expensive-first" class="hotel-filter hotel-filter-dropdown">Expensive first</div> 
    <div role="radio" aria-checked="false" tabindex="1" id="stars" class="hotel-filter hotel-filter-dropdown">Start from 2</div> 
    <div role="radio" aria-checked="false" tabindex="1" id="min-rating" class="hotel-filter hotel-filter-dropdown">Not under 6</div> 
    <div role="radio" aria-checked="false" tabindex="1" id="distance" class="hotel-filter hotel-filter-dropdown">Close to me</div> 
    <div role="radio" aria-checked="false" tabindex="1" id="favorites" class="hotel-filter">Favorites</div> 
</form> 

JS:

var filters = document.querySelectorAll('.hotel-filter'); 
for (var i = 0; i <= filters.length; i++) { 
    filters[i].onclick = function(evt) { 
    var clickedElementID = evt.target.id; 
    setActiveFilter(clickedElementID); 
    }; 
} 

瀏覽器彰顯的代碼

= function(evt) { 

這部分,說我「遺漏的類型錯誤:不能設置屬性'onclick'未定義「

+0

這似乎是某個微不足道的錯字或指標,[你沒有花足夠的時間調試(http://meta.stackoverflow.com/a/261593/497418),無論哪種方式,它應該是關閉[主題(#2)](/幫助/話題),因爲它不可能幫助未來的訪問者。 – zzzzBov

回答

3

否則,您需要更新for循環條件,因爲索引超出範圍(最大索引爲filters.length - 1,最後一個索引爲filters.length),因此在最後一次迭代時它將爲undefined。錯誤在拋出,因爲在上次迭代中,您試圖在undefined上設置onclick屬性,這是不可能的。

i < filters.length 
0

迭代器達到比元素數量多一個數字。這裏是正確的迭代 var filters = document.querySelectorAll('。hotel-filter');

for (var i=0; i < filters.length; i++) { 

     filters[i].onclick = function(evt) { 
     var clickedElementID = evt.target.id; 
     setActiveFilter(clickedElementID); 
    }; 
    } 
相關問題