5

このコードのどこにエラーがあるのか​​ わかりません。Chrome デバッグ コンソールの 31 行目で、「Uncaught TypeError: Undefined のメソッド '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
    };
;}) ();
4

3 に答える 3

1

私の場合、これは Evernote Clipper 拡張スクリプトが原因です。エラーをスローするスクリプトをクリックすると、コメントに「Evernote」が表示されます。

于 2012-08-09T23:37:25.413 に答える
0

あなたのbind呼び出しが最終的にundefined element?(たとえば、DOM内のどの要素とも一致しないセレクターを渡します)

于 2012-04-17T11:02:27.073 に答える
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);

文字列に要素のIDが含まれている場合、または

 element = $("." + element)[0];

文字列に要素のclassNameが含まれている場合。

于 2012-04-17T11:02:58.647 に答える