Considérons le javascript/code jQuery:L'ajout d'un élément avec un gestionnaire d'événements à un ensemble d'éléments
jQuery("<input/>").attr("type", "button").attr("value", "Click me")
.click(function()
{
alert("hello");
})
.appendTo(".someDiv");
Cela crée un bouton, se fixe un gestionnaire d'événement et l'ajoute à tous les éléments avec la classe « someDiv ".
Cela fonctionne comme prévu SEULEMENT s'il n'y a qu'un seul élément avec la classe "someDiv" dans le document. S'il y en a plus, les boutons sont affichés, mais l'événement click n'est pas déclenché.
Je suis conscient que je peux utiliser la solution suivante:
jQuery(".someDiv").each(function()
{
jQuery("<input/>").attr("type", "button").attr("value", "Click me")
.click(function()
{
alert("hello");
})
.appendTo(this);
});
Ce qui fonctionne, mais est sans doute moins élégante. Je suppose que cela a quelque chose à voir avec le fait que dans le premier exemple, il n'y a qu'un élément créé et que le même élément est ajouté à tous les "someDiv", alors que dans le second exemple il y a plusieurs éléments créés, mais Je ne comprends pas pourquoi cela signifierait que le gestionnaire d'événements ne fonctionne pas dans le premier exemple.
Quelle version de jQuery utilisez-vous? J'ai essayé votre exemple original et ma solution avec 1.3.2 et ils ont tous deux travaillé. – Jataro
J'utilise une ancienne version (1.1.4). Je l'ai essayé avec 1.3.2 et les deux versions fonctionnent. Conclusion: bug dans l'ancienne version. (Ce que je vais devoir respecter pour des raisons de compatibilité ...) –