Javascript 无法调用方法。。。未定义的

Javascript 无法调用方法。。。未定义的,javascript,Javascript,所以我制作了这个代码,它几乎完美地工作。一件事是setupListener方法在最后返回一个错误,可能它找到了一个我不想找到的属性。我已经为此挣扎了一段时间,但我显然没有太多的js经验来解决它。我已经为调试设置了一些console.log方法。您可以这样使用此函数:setupListener(Id或类或标记名作为字符串,要监视的事件作为字符串,以及操作) 例如,setupListener('.pun',click',函数(e){console.log(e);}) var getElement=函

所以我制作了这个代码,它几乎完美地工作。一件事是setupListener方法在最后返回一个错误,可能它找到了一个我不想找到的属性。我已经为此挣扎了一段时间,但我显然没有太多的js经验来解决它。我已经为调试设置了一些console.log方法。您可以这样使用此函数:
setupListener(Id或类或标记名作为字符串,要监视的事件作为字符串,以及操作)

例如,
setupListener('.pun',click',函数(e){console.log(e);})

var getElement=函数(onStr){
if(onStr.indexOf('.')==0){
onStr=onStr.切片(1);
返回文档.getElementsByClassName(onStr);
} 
if(onStr.indexOf('#')==0){
onStr=onStr.切片(1);
返回文档.getElementById(onStr);
} 
if(onStr.indexOf('#')!==0&&onStr.indexOf('.')!==0){
return document.onStr=document.getElementsByTagName(onStr);
}
};
var setupListener=函数(elementStr、eventStr、action){
var templement=getElement(elementStr);
//元素的集合,并具有addEventListener方法
if(tempElement.length>1&&tempElement[1].addEventListener){
对于(var i=1;tempElement.length>=i;i++){
if(typeof(tempElement[i].addEventListener)!=“未定义”)
console.log('1');//调试
tempElement[i].addEventListener(eventStr,action);
}   
}
//IE<9支持
//元素是一个集合,没有addEventListener方法
else if(tempElement.length>1&&!tempElement[1].addEventListener){
对于(var i=1;tempElement.length>=i;i++){
if(typeof(tempElement[i].addEventListener)!=“未定义”)
console.log('2');//调试
tempElement[i].attachEvent(eventStr,action);
}
}
//元素不是集合,并且具有addEventListener方法
如果(!tempElement.length>1&&tempElement.addEventListener),则为else{
console.log('3');//调试
addEventListener(eventStr,action);
}
//元素不是集合,并且没有addEventListener方法
//IE<9支持
如果(!tempElement.length>1&&!tempElement.addEventListener),则为else{
console.log('4');//调试
tempElement.attachEvent(eventStr,action);
}
否则{
console.log('5');//调试
}
};

您的问题在于元素集合的一部分。请注意,通过
array[0]
获取数组的第一个元素,因此通过
array[array.length-1]
获取最后一个元素。但是当你在数组上迭代时,你要做的是,从1开始,迭代到
array.length
。当您试图访问一个不可用的数组元素(如
array[array.length]
)时,您将得到
未定义的
,这就是您的错误。因此,您必须更改
循环的
边界。即

for (var i = 0; i < tempElement.length; i++)
for(变量i=0;i
也许您应该显示您得到的确切错误。此外,将其标记为
javascript
而不是
undefined
可能有助于吸引正确的(javascript)人的注意。这并不是说jQuery总是解决方案,但这段代码很容易被
$('.some class')替换。on('click',function(){…code…})我不是在寻找替代方案,而是将其编码为简单的javascript实践。我得到的错误:TypeError:无法读取未定义的属性“addEventListener”;代码在#上执行,每个项都有相同的类。共有243项(-1)是长度属性,而(242)只是一个html元素。所以我所做的是,在添加任何事件侦听器之前,检查该节点是否有一个.addEventListener,但它没有完成这项工作。你说得太对了。我认为html元素集合以1开头。我很确定有什么东西(dom集合或其他东西)不是以0开始的,而是以1开始的,但它是什么?非常感谢。不客气。如果你能接受正确的答案,那就太好了。我很高兴,我现在确保不再犯这样愚蠢的错误#研究
for (var i = 0; i < tempElement.length; i++)