[英]Add keypress or eventlistener to input, “TypeError: …addEventListener is not a function”
[英]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.