未捕获的TypeError:无法调用未定义的方法'addEventListener'
无法确定此代码中的错误在哪里。 Chrome调试控制台继续说:“Uncaught TypeError:无法在第31行调用未定义的方法'addEventListener'!未捕获的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
};
;})();
难道你bind
调用与undefined
element
结束了呢? (例如,您传递的选择器与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];
与
element = $("#" + element);
提供的字符串中包含的元素的ID,或
element = $("." + element)[0];
如果字符串包含的一个className元件。
这个浏览器确实知道:“TypeError:无法在第31行调用未定义的方法'addEventListener'” – Teemu 2012-04-17 11:04:36
这不是浏览器问题,也许巴甫洛夫是正确的...谁知道在各种脚本中的问题是什么... – 2012-04-17 11:14:31
在我的情况下,这是由Evernote Clipper扩展脚本引起的。点击发出错误的脚本时,您会在评论中找到“Evernote”。
在我的情况下,我在另一个脚本中有这个错误。关闭它解决了问题 – 2013-06-12 14:28:09
'element'不存在。请发布调用'bind()'的代码和定义'element'的代码。 – Teemu 2012-04-17 11:01:20
发现它!这是另一个脚本的问题。我使用谷歌Chrome开发者控制台e跟踪了右脚本中的回调:D – 2012-04-17 12:42:31