簡體   English   中英

Javascript添加偵聽器錯誤:TypeError:trigger.addEventListener不是函數

[英]Javascript add Listener error: TypeError: trigger.addEventListener is not a function

我使用以下代碼將偵聽器添加到一個或多個鏈接中:

 function getData() {
            var context = {};
            context['triggers'] = triggers();
            context['msg'] = msg;
            return context
        }

function triggers() {
            var arr = [];
            document.querySelectorAll('.trigger').forEach(function (trigger, index) {
                arr[index] = {};
                arr[index]['trigger'] = trigger;
            });
            return arr;
        }



function addListeners(data) {
            data.triggers.forEach(function (trigger) {
                trigger.addEventListener('click', change)
            });
        }

data = geData()

觸發器是錨點:

在此處輸入圖片說明

我收到以下錯誤:

TypeError: trigger.addEventListener is not a function

triggers的對象不是錨點,而是包含錨點作為名為trigger的屬性的對象。 所以:

function addListeners(data) {
    data.triggers.forEach(function (entry) {            // *** `entry` instead of `trigger`
        entry.trigger.addEventListener('click', change)
// -----^^^^^^
    });
}

我們知道這是因為以下代碼:

function triggers() {
    var arr = [];
    document.querySelectorAll('.trigger').forEach(function (trigger, index) {
        arr[index] = {};
        arr[index]['trigger'] = trigger;
    });
    return arr;
}

顯然是在創建一個對象,然后將該元素設置為其上的trigger屬性。


旁注:您可以在幾個使用字符串的地方使用屬性初始化器和屬性文字語法,而FWIW則可以將map應用於NodeList

function getData() {
    return {
        triggers: triggers(),
        msg: msg
    };
}

function triggers() {
    return Array.prototype.map.call(
        document.querySelectorAll('.trigger'),
        function(anchor) {
            return {trigger: anchor};
        }
    );
}

function addListeners(data) {
    data.triggers.forEach(function (entry) {
        entry.trigger.addEventListener('click', change)
    });
}

data = geData();

暫無
暫無

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

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