Le problème ici est que le "on" est appliqué à tous les éléments qui existent à ce moment-là. Lorsque vous créez un élément de manière dynamique, vous devez exécuter à nouveau le "on" :
$('form').on('submit',doFormStuff);
createNewForm();
// re-attach to all forms
$('form').off('submit').on('submit',doFormStuff);
Comme les formulaires ont généralement des noms ou des ID, vous pouvez simplement les attacher au nouveau formulaire. Si je crée beaucoup de choses dynamiques, je vais inclure une fonction de configuration ou de liaison :
function bindItems(){
$('form').off('submit').on('submit',doFormStuff);
$('button').off('click').on('click',doButtonStuff);
}
Ainsi, à chaque fois que vous créez quelque chose (des boutons, dans mon cas), j'appelle simplement bindItems pour mettre à jour tout ce qui se trouve sur la page.
createNewButton();
bindItems();
Je n'aime pas utiliser les éléments de type "body" ou "document", car avec les onglets et les fenêtres modales, ils ont tendance à traîner et à faire des choses inattendues. J'essaie toujours d'être aussi précis que possible, sauf s'il s'agit d'un simple projet d'une page.