在下面的代碼中,j
的值始終設置爲迭代的最後一個。我已經使用了一個IIFE,但它仍然給出了預期的行爲。有什麼我做錯了嗎?addEventListener on循環不適用於IIFE
function renderUsers(users) {
const frag = document.createDocumentFragment();
const userList = document.getElementById('user-list');
// Create and append all the users on the user list
for (var j = 0; j < users.length; j++) {
var item = document.createElement('li');
var division = document.createElement('div');
var userName = document.createElement('span');
var deleteButtonAnchor = document.createElement('a');
var deleteButton = document.createElement('i');
deleteButton.classList.add('material-icons');
deleteButton.textContent = 'delete_forever';
(function() {
deleteButton.addEventListener('click',function() {
console.log(j);
});
})();
deleteButtonAnchor.appendChild(deleteButton);
division.appendChild(userName);
division.appendChild(deleteButtonAnchor);
item.appendChild(division);
userName.appendChild(document.createTextNode(users[j].name.first+' '+users[j].name.last));
frag.appendChild(item);
}
userList.appendChild(frag);
}
你沒有將'j'傳遞給IIFE。在循環中創建函數也被認爲是不好的做法。改用外部功能。請參閱http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example – Teemu