2017-01-16 4 views
-1

HTML:kann nicht eingestellt Eigenschaft 'Onclick' undefinierter

<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); 
    }; 
} 

Browser hebt diesen Teil des Codes

= function(evt) { 

und sagt mir „Uncaught Typeerror: Kann nicht Eigenschaft 'onclick' von undefined setzen "

+0

Dies scheint einen trivialen Tippfehler oder einen Indikatoren entweder zu sein, dass [Sie nicht genug Zeit, das Debuggen verbracht haben] (http://meta.stackoverflow.com/a/261593/497418), entweder wie es sein sollte geschlossen als [off-topic (# 2)] (/ help/on-topic), da es zukünftigen Besuchern wahrscheinlich nicht helfen wird. – zzzzBov

Antwort

3

Sie müssen die Bedingung für die for-Schleife aktualisieren, andernfalls würde es in der letzten Iteration undefined sein, da der Index außerhalb des Bereichs liegt (der maximale Index ist filters.length - 1 und der letzte Index wäre filters.length). Der Fehler wird ausgegeben, weil Sie in der letzten Iteration versuchen, die Eigenschaft onclick auf undefined zu setzen, was nicht möglich ist.

i < filters.length 
0

Der Iterator erreicht eine Zahl mehr als die Anzahl der Elemente. Hier ist die korrekte Iteration 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); 
    }; 
    } 
Verwandte Themen