无法设置属性未定义

问题描述:

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.*.com/a/261593/497418),无论哪种方式,它应该是关闭[主题(#2)](/帮助/话题),因为它不可能帮助未来的访问者。 – zzzzBov

否则,您需要更新for循环条件,因为索引超出范围(最大索引为filters.length - 1,最后一个索引为filters.length),因此在最后一次迭代时它将为undefined。错误在抛出,因为在上次迭代中,您试图在undefined上设置onclick属性,这是不可能的。

i < filters.length 

迭代器达到比元素数量多一个数字。这里是正确的迭代 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); 
    }; 
    }