简体   繁体   English

Javascript添加侦听器错误:TypeError:trigger.addEventListener不是函数

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

I'm adding listeners to one link or multiple links, using the following code: 我使用以下代码将侦听器添加到一个或多个链接中:

 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()

Trigger is an anchor: 触发器是锚点:

在此处输入图片说明

I get the following error: 我收到以下错误:

TypeError: trigger.addEventListener is not a function

The object in triggers isn't the anchor, it's an object that contains the anchor as a property called trigger . triggers的对象不是锚点,而是包含锚点作为名为trigger的属性的对象。 So: 所以:

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

We know this because of this code: 我们知道这是因为以下代码:

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

That's clearly creating an object, then setting the element as a trigger property on it. 显然是在创建一个对象,然后将该元素设置为其上的trigger属性。


Side note: You can use property initializers and property literal syntax in several places where you're using strings, and FWIW you can apply map to a NodeList : 旁注:您可以在几个使用字符串的地方使用属性初始化器和属性文字语法,而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.

相关问题 将按键或事件侦听器添加到输入中,“ TypeError:…addEventListener不是函数” - Add keypress or eventlistener to input, “TypeError: …addEventListener is not a function” JavaScript 未捕获类型错误:replay.addEventListener 不是 function - JavaScript Uncaught TypeError: replay.addEventListener is not a function Javascript-TypeError:侦听器必须是一个函数 - Javascript - TypeError: listener must be a function 如何在JavaScript的addEventListener函数中添加函数? - How to add a function in a addEventListener function in javascript? TypeError:$(…).addEventListener不是函数 - TypeError: $(…).addEventListener is not a function 错误 JavaScript addToDoButton.addEventListener("click", function(){ - Error in JavaScript addToDoButton.addEventListener("click", function(){ addEventListener错误:未捕获的TypeError - addEventListener error: Uncaught TypeError 如何在JavaScript中修复“未捕获的TypeError:action.addEventListener不是函数” - How to fix “Uncaught TypeError: action.addEventListener is not a function” in JavaScript 未捕获的类型错误:c.addEventListener 不是函数……? javascript DOM 事件 - Uncaught TypeError: c.addEventListener is not a function…? javascript DOM Event 未捕获的TypeError:识别.addEventListener不是函数吗?JS语音识别错误 - Uncaught TypeError: recognition.addEventListener is not a function?JS speech recognition error
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM