无法确定此代码中的错误在哪里。 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
};
;}) ();
答案 0 :(得分:1)
就我而言,这是由Evernote Clipper扩展脚本引起的。当您单击该脚本并抛出错误时,您会在评论中找到“Evernote”。
答案 1 :(得分:0)
您的bind
调用是否会以undefined
element
结束? (例如,您传递的选择器与DOM中的任何元素都不匹配)
答案 2 :(得分:0)
某些浏览器不知道“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);
如果string包含元素的id,或
element = $("." + element)[0];
如果字符串包含元素的className。