簡體   English   中英

無法調用未定義的方法…

[英]Cannot call method … of undefined

因此,我編寫了這段代碼,它幾乎可以完美運行。 一件事是setupListener方法最后返回一個錯誤,可能是找到了我不想找到的屬性。 我已經為此苦苦掙扎了一段時間,但是我顯然沒有太多使用js來解決它的經驗。 我已經設置了一些console.log方法進行調試。 您可以像這樣使用此函數: setupListener(Id or Class or a Tag name as string, event to watch on as string, and an action)

例如。 setupListener('.pun', 'click', function (e){ console.log(e); });

    var getElement = function (onStr) {
    if (onStr.indexOf('.') === 0) {
        onStr = onStr.slice(1);
        return document.getElementsByClassName(onStr);
    } 

    if (onStr.indexOf('#') === 0) {
        onStr = onStr.slice(1);
        return document.getElementById(onStr);
    } 

    if (onStr.indexOf('#') !== 0 && onStr.indexOf('.') !== 0) {
        return document.onStr = document.getElementsByTagName(onStr);
    }
};

var setupListener = function (elementStr, eventStr, action) {
    var tempElement = getElement(elementStr);

        // element a collection and has addEventListener method
        if (tempElement.length > 1 && tempElement[1].addEventListener) {
            for (var i = 1; tempElement.length >= i; i++) {
                if (typeof(tempElement[i].addEventListener) !== "undefined")
                    console.log('1'); //debugging
                    tempElement[i].addEventListener(eventStr, action);
            }   
        }

        // IE < 9 Support
        // element a collection and has NOT addEventListener method
        else if (tempElement.length  > 1 && !tempElement[1].addEventListener) {
            for (var i = 1; tempElement.length >= i; i++) {
                if (typeof(tempElement[i].addEventListener) !== "undefined")
                    console.log('2'); // debugging
                    tempElement[i].attachEvent(eventStr, action);
            }
        }

        // element not a collection and HAS addEventListener method
        else if (!tempElement.length > 1 && tempElement.addEventListener) {
            console.log('3'); // debugging
            tempElement.addEventListener(eventStr, action);
        }

        // element not a collection and has NOT addEventListener method
        // IE < 9 support
        else if (!tempElement.length > 1 && !tempElement.addEventListener) {
            console.log('4'); // debugging
            tempElement.attachEvent(eventStr, action);
        }

    else { 
     console.log('5'); // debugging
    }
};

您的問題在於元素集合的一部分。 請注意,通過array[0]獲得array[0]的第一個元素,因此通過array[array.length-1]獲得最后的元素。 但是,當您遍歷數組時,您要做的就是從1開始迭代到array.length 當您嘗試訪問不可用的array-element(如array[array.length] )時,將得到undefined ,這很容易出錯。 因此,您必須在for -loops中更改界限。

for (var i = 0; i < tempElement.length; i++)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM