[英]Cannot call method … of undefined
因此,我编写了这段代码,它几乎可以完美运行。 一件事是setupListener方法最后返回一个错误,可能是找到了我不想找到的属性。 我已经为此苦苦挣扎了一段时间,但是我显然没有太多使用js来解决它的经验。 我已经设置了一些console.log方法进行调试。 您可以像这样使用此函数: setupListener(Id or Class or a Tag name as string, event to watch on as string, and an action)
;
例如。 setupListener('.pun', 'click', function (e){ console.log(e); });
var getElement = function (onStr) {
if (onStr.indexOf('.') === 0) {
onStr = onStr.slice(1);
return document.getElementsByClassName(onStr);
}
if (onStr.indexOf('#') === 0) {
onStr = onStr.slice(1);
return document.getElementById(onStr);
}
if (onStr.indexOf('#') !== 0 && onStr.indexOf('.') !== 0) {
return document.onStr = document.getElementsByTagName(onStr);
}
};
var setupListener = function (elementStr, eventStr, action) {
var tempElement = getElement(elementStr);
// element a collection and has addEventListener method
if (tempElement.length > 1 && tempElement[1].addEventListener) {
for (var i = 1; tempElement.length >= i; i++) {
if (typeof(tempElement[i].addEventListener) !== "undefined")
console.log('1'); //debugging
tempElement[i].addEventListener(eventStr, action);
}
}
// IE < 9 Support
// element a collection and has NOT addEventListener method
else if (tempElement.length > 1 && !tempElement[1].addEventListener) {
for (var i = 1; tempElement.length >= i; i++) {
if (typeof(tempElement[i].addEventListener) !== "undefined")
console.log('2'); // debugging
tempElement[i].attachEvent(eventStr, action);
}
}
// element not a collection and HAS addEventListener method
else if (!tempElement.length > 1 && tempElement.addEventListener) {
console.log('3'); // debugging
tempElement.addEventListener(eventStr, action);
}
// element not a collection and has NOT addEventListener method
// IE < 9 support
else if (!tempElement.length > 1 && !tempElement.addEventListener) {
console.log('4'); // debugging
tempElement.attachEvent(eventStr, action);
}
else {
console.log('5'); // debugging
}
};
您的问题在于元素集合的一部分。 请注意,通过array[0]
获得array[0]
的第一个元素,因此通过array[array.length-1]
获得最后的元素。 但是,当您遍历数组时,您要做的就是从1开始迭代到array.length
。 当您尝试访问不可用的array-element(如array[array.length]
)时,将得到undefined
,这很容易出错。 因此,您必须在for
-loops中更改界限。 即
for (var i = 0; i < tempElement.length; i++)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.