我在使用JavaScript代碼時遇到了一些問題。 我想要做的是將事件監聽器添加到數組中的元素。通過循環添加事件監聽器
問題是,代碼運行後只有數組中的最後一個元素獲取eventlistener工作,其餘元素返回錯誤。
我假設這是因爲我用for循環和eventlisteners的邏輯。 什麼是實現預期結果的有效方法?
function addSlider(config) {
var controls = `
<div id="next"> next </div>
<div id="previous"> previous </div>`;
var S_wrapper = config.wrapper;
var controls_html = document.createElement("div");
controls_html.setAttribute("id", "ctrl");
controls_html.innerHTML = controls;
var arrayData = config.wrapper.split(",");
for (i = 0; i < arrayData.length; i++) {
(function(index) {
document.querySelector(arrayData[i]).appendChild(controls_html);
var parent = document.querySelector(arrayData[index]);
console.log(i, index, arrayData[index], parent);
document.querySelector(arrayData[index]).addEventListener("mouseover", function(){
this.querySelector("#ctrl").style.display = "block";
})
document.querySelector(arrayData[index]).addEventListener("mouseout", function(){
this.querySelector("#ctrl").style.display = "none";
})
})(i);
}
}
你有沒有考慮過將事件監聽器添加到所有渲染的arrayData的父節點,所以你只需要一個處理程序而不是每個元素相同?但是,是的,你的問題是一個關閉相關的問題,我會嘗試找到重複。 – Shilly