Javascript 未捕获类型错误:无法调用方法';增补列表器';未定义的
无法找出此代码中的错误所在。Chrome调试控制台在第31行一直说“UncaughtTypeError:无法调用未定义的'addEventListener'方法!”Javascript 未捕获类型错误:无法调用方法';增补列表器';未定义的,javascript,dom,Javascript,Dom,无法找出此代码中的错误所在。Chrome调试控制台在第31行一直说“UncaughtTypeError:无法调用未定义的'addEventListener'方法!” jewel.dom = (function() { var $ = Sizzle; function hasClass(el, clsName){ var regex = new RegExp("(^|\\s) + clsName + (\\s|$)"); return rege
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
};
;}) ();
您的
bind
调用是否会以未定义的元素
结束?(例如,您传递的选择器与DOM中的任何元素都不匹配)一些浏览器不知道什么是“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];
与
如果字符串包含元素的id,或
element = $("." + element)[0];
如果字符串包含元素的类名。在我的例子中,这是由Evernote Clipper扩展脚本引起的。当您单击抛出错误的脚本时,您将在注释中找到“Evernote” 元素
不存在。请发布调用bind()
的代码和定义元素的代码。找到了!问题出在另一个脚本中。我使用google chrome开发者控制台跟踪了正确脚本中的回调:d此浏览器确实知道:“TypeError:无法调用第31行未定义的方法'addEventListener'”!“这不是浏览器的问题,也许巴甫洛夫是对的……谁知道问题出在不同的脚本中……在我的例子中,我在另一个脚本中出现了这个错误。关闭它解决了问题。”
element = $("." + element)[0];