Это обычная проблема. Когда вы создаете обработчик click
, он устанавливает id
в i
- переменную, а не значение, которое i
сохранял в то время.
Цикл for
завершается до щелчка по любому из DIV, поэтому i
равно окончательному значению из цикла для всех обработчиков щелчков, и в результате все id
устанавливаются в то же значение.
С помощью jQuery вы можете решить эту проблему, используя .data()
хранилище:
for (var i=0; i<dataElements; ++i){
d=document.createElement('div');
$(d).addClass('overviewbit')
.appendTo('.overview')
.data('val',i)
.click(function(){
id = $(this).data('val');
});
}
Однако, чтобы сделать все «правильно», вы должны использовать JavaScript JavaScript :
for (var i=0; i<dataElements; ++i){
d=document.createElement('div');
$(d).addClass('overviewbit')
.appendTo('.overview')
.data('val',i)
.click((function(j){
return function() { id = j; }
})(i));
}