Démonstration de travail
Il s'agit d'un problème classique de fermeture JavaScript. La référence à la i
est stocké dans la fermeture du gestionnaire de clics, plutôt que la valeur réelle de l'objet i
.
Chaque gestionnaire de clic fera référence au même objet car il n'y a qu'un seul objet compteur qui peut contenir 6, donc vous en obtenez six à chaque clic.
La solution de contournement est d'envelopper cela dans une fonction anonyme et de passer i comme argument. Les primitives sont copiées par valeur dans les appels de fonction.
for(var i=1; i<6; i++) {
(function (i) {
$("#div" + i).click(
function () { alert(i); }
);
})(i);
}
UPDATE
Mise à jour de la DEMO
Ou vous pouvez utiliser "laisser au lieu de var
de déclarer i
. let
vous donne une reliure fraîche à chaque fois. Il ne peut être utilisé qu'avec ECMAScript 6. strict mode
.
'use strict';
for(let i=1; i<6; i++) {
$("#div" + i).click(
function () { alert(i); }
);
}