Существует действительно проблема с вашими замыканиями, и это связано с вашим использованием var i
. Поскольку ваша анонимная функция не имеет локальной версии i
, она использует версию функции над ней. Однако, когда он пытается получить доступ к i
на более позднем этапе, i
== 11 (поскольку именно это заставило цикл завершиться) Чтобы это исправить, вам нужно объявить локальную версию i
в каждой анонимной функции, например:
for (var i=1; i<11; i++) {
(function( ){ //anonymous function for scope
var index = i; // The important part!
// It's not technically necessary to use 'index' here, but for good measure...
imageSource[index] = 'images/img' + index + '.png';
imgArea[index] = '#areamap_Img' + index;
$(imgArea[index]).hover(
function() {
$('#imgSwap').attr('src',imageSource[index]); // Here's where `index` is necesssary.
},
function() {
$('#imgSwap').attr('src','images/img0.png');
});
})(); // end anonymous function and execute
}; // for loop
Кроме того, в вашем коде есть небольшая проблема, которую вы должны исправить просто. Вы неправильно обращаетесь к своим локальным переменным; Вы должны использовать:
var imageSource = [];
var imageSource[0] = 'images/img0.png' //load 0 position with "empty" png
var imgArea = []
Без «var» вы объявляете и получаете доступ к глобальным переменным. (Если это ваше предполагаемое поведение, то я прошу прощения.)