[英]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.