現在已經回答了。不是ES6或事件監聽器的問題,而是innerHTML如何工作。它將刪除所有的html(打破聽衆),然後添加html,只添加最新的偵聽器。謝謝。我遇到了es6類和事件監聽器的問題?
基本上我遇到了ES6類和事件監聽器的問題。或者它可能只是我對整個事物的理解。
我正在動態創建5個同名類的實例,名爲'Thing'。每個'Thing'都會將一段HTML寫入包含按鈕的DOM,並添加一個事件偵聽器來處理點擊。正在使用document.querySelector選擇元素,並基於名爲'indexNumber'的數據屬性來唯一標識每個按鈕。
由於每個事物都是它自己的實例,我想到每個按鈕都可以工作,但只有最後一個按鈕才能工作。爲什麼一個類的一個實例覆蓋另一個類?
任何人都可以解釋這裏發生了什麼?
HTML
<h1>Things</h1>
<span class="output"></span>
<div class="thingHolder"></div>
JS(巴貝爾)
class Thing {
constructor(index) {
this.Index = index;
this.html = '<div class="thing" data-index-number="'+ index +'">Thing ' + index + '<button type="button">Click Me!</button></div>';
this.renderDom();
}
renderDom(){
const thingHolder = document.querySelector(".thingHolder");
thingHolder.innerHTML += this.html;
this.addEventListeners();
}
addEventListeners(){
const button = document.querySelector('.thingHolder .thing[data-index-number="' + this.Index + '"] button');
button.addEventListener("click",() => {
this.doSomething()
}, false);
}
doSomething(){
const output = document.querySelector(".output");
output.innerHTML = 'You clicked thing #' + this.Index;
console.log('You clicked thing #' + this.Index)
}
}
for(var i = 0; i < 5; i++) {
var thing = new Thing(i);
}
* * JavaScript的 「或什麼是通天使用」;) –
@FelixKling我不知道。非常隱晦的事情現在在網絡中使用XP – germanfr