J'utilise la fonction suivante pour lier tous les membres d'une certaine classe à une fonction qui modifie la page en cours. Voici la fonction:La chaîne ne semble pas être transmise par la valeur
function _bind_menu_items() {
var menuItems = fja.getElementsByClass("menuItem"),
index,
elementID,
divIdToBind;
for (index in menuItems) {
elementID = menuItems[index].id;
divIdToBind = elementID.replace("Item", "");
menuItems[index].onclick = function() {
fja.menu.changeActivePage(divIdToBind);
};
}
}
J'ai vérifié que tout fonctionnait comme prévu jusqu'à l'affectation réelle de la propriété onclick. L'erreur que j'obtiens est que chaque div appartenant à la classe menuItem semble appeler la même fonction onclick ... comme si la chaîne divIdToBind est exactement la même pour chaque onclick qui est assigné ... Comment puis-je résoudre ce problème?
Tous vos gestionnaires d'événements de clic font référence à la même variable 'divIdToBind' (vous créez une fonction dans une boucle). C'est un problème assez commun. Recherchez * fermetures de boucles javascript * et jetez un oeil à [Fermetures pour les nuls] (http: //blog.morrisjohns..com/javascript_closures_for_dummies.html) (Exemple 5) –
@Thilo: Merci d'avoir trouvé cela. Je cherchais toujours une bonne copie de cette situation. Celui-ci semble être assez bon. –