Вы создаете функцию в цикле (замыкания). Все переменные будут разделены между ними, а также i
.
Когда функции в конечном итоге вызываются, цикл уже завершен, и i
будет иметь значение 5
.
JavaScript не имеет области видимости блока. Чтобы создать новую область видимости и зафиксировать значение переменных, вы вызываете функцию:
for(var i=0;i<5;i++){
(function(x) {
$("#ImageProductLeft"+count.toString()).bind('click', function(){
alert(x);
});
}(i));
}
Здесь мы используем непосредственную функцию для «захвата» значения i
.
Тем не менее, поскольку вы используете jQuery, есть и другие, более элегантные методы для решения этой проблемы, как показано в и @ Shadow Wizard *1018* ответах *1017* @ scessor.
Тем не менее, важно знать , почему работает так и как это можно решить с помощью "чистого" JavaScript.
Затворы могут быть хитрыми. Предлагаю взглянуть на JavaScript-закрытия для чайников .