Je suis confronté à un comportement étrange avec la méthode .append()
de jQuery..append() de jQuery: comportement étrange
var container = $('#container');
var buttons = {
'Okay': function() {
return 'Yeah, I\'m okay with this.';
},
'Nope': function() {
return 'No, no, definitively no.';
},
'Maybe': function() {
return 'Hum, maybe.';
}
};
for(var button_label in buttons) {
var button_callback = buttons[button_label];
var button_html = $('<button type="button">' + button_label + '</button>');
button_html.on('click', function() {
alert('button : ' + $(this).text() + ', callback : ' + button_callback());
});
container.append(button_html);
}
Tout fonctionne très bien, sauf, comme vous pouvez le voir, en cliquant sur les boutons: le même rappel est appelée (le dernier défini dans l'objet buttons
). J'ai vérifié le document de jQuery, et c'est peut-être lié:
S'il y a plus d'un élément cible, les copies clonées de l'élément inséré seront créées pour chaque cible après la première.
Ou, j'ai besoin de refactoriser mon code. J'ai testé différentes solutions, mais aucune n'a fonctionné. Est-ce que quelqu'un peut m'aider ?
Vous pouvez ajouter un bel article à propos de IIFE comme celui-ci: http://benalman.com/news/2010/11/immediately-invoked-function-expression/ –
Merci voleur pour votre réponse détaillée (même si c'est une question noob , Je n'utilise pas JS tous les jours), et merci pour le mec qui m'a répondu en pensant que je suis un total sans vie, sachant que chaque communauté gouverne de bout en bout. – Epoc