2014-12-02 2 views
3

Я хочу передать параметры в функции щелчка.addEventListener клик, выполненный до щелчка

var albums = document.getElementsByClassName("album"); 
for(var i = 0; i<albums.length; i++){ 
    document.getElementById(albums[i].id).addEventListener("click", goAlbum(albums[i].id), false); 
} 

однако, функция «goAlbum» получает те или иную строчку, когда он будет создан, а затем эта функция не будет больше Выполнения выражений. что я делаю неправильно?

ответ

5

goAlbum получил исполнение, потому что вы вызвали функцию. Вы не «создавали» функцию. То, что вы намеревались сделать, это поставить addEventListener с логикой для выполнения, когда что-то щелкнули; что логика «вызывает goAlbum». Для этого заверните вызов функции в анонимную функцию.

function toArray(list) { 
    return Array.prototype.slice.call(list); 
} 

var albums = toArray(document.getElementsByClassName("album")); 
albums.forEach(function (album) { 
    document.getElementById(album.id).addEventListener("click", function() { 
     goAlbum(album.id); 
    }, false); 
}); 

Кроме того, из-за it is unwise to create functions in a for loop, я переработан код, чтобы использовать forEach. Мне нужно преобразовать NodeList, возвращенный document.getElementsByClassName, Array, чтобы использовать forEach, следовательно toArray.

+0

Отличный ответ, это просто решило мою проблему. – Alos

Смежные вопросы