未捕获的类型错误:无法调用未定义的方法“addEventListener”
2012-04-17
10493
无法确定此代码中的错误在哪里。Chrome 调试控制台在第 31 行一直显示“Uncaught TypeError:无法调用未定义的方法‘addEventListener’”!
jewel.dom = (function() {
var $ = Sizzle;
function hasClass(el, clsName){
var regex = new RegExp("(^|\\s) + clsName + (\\s|$)");
return regex.test(el.className);
}
function addClass(el, clsName) {
if (!hasClass(el,clsName)) {
el.className += ""+ clsName;
}
}
function removeClass (el, clsName) {
var regex = new RegExp("(^|\\s)" + clsName + "(\\s|$)");
el.className = el.className.replace(regex, " ");
}
function bind(element, event, handler) {
if (typeof element == "string") {
element = $(element)[0];
}
element.addEventListener(event, handler, false)
}
return {
$:$,
hasClass : hasClass,
addClass : addClass,
removeClass : removeClass,
bind : bind
};
;}) ();
3个回答
就我而言,这是由 Evernote Clipper 扩展脚本引起的。单击引发错误的脚本时,您会在注释中看到“Evernote”。
Zhongjie Wu
2012-08-09
您的
bind
调用是否可能以
undefined
element
结束?(例如,您传递的选择器与您的 DOM 中的任何元素都不匹配)
Alexander Pavlov
2012-04-17
有些浏览器不知道“addEventListener”是什么。试试这个:
Element.prototype.setEvent = function(eventName, handler)
{
if(document.addEventListener)
{
this.addEventListener(eventName, handler);
}
else
{
if(document.attachEvent)
{
this.attachEvent("on" + eventName, handler);
}
}
}
element.setEvent(eventName, handler);
removeEventListener 也是如此。
此外,尝试将
element = $(element)[0];
替换为
element = $("#" + element);
前提是字符串包含元素的 id,或者
element = $("." + element)[0];
前提是字符串包含元素的 className。
d4rkpr1nc3
2012-04-17