Проблема здесь в том, что «on» применяется ко всем элементам, существующим ВРЕМЯ. Когда вы создаете элемент динамически, вам нужно снова запустить:
$('form').on('submit',doFormStuff);
createNewForm();
// re-attach to all forms
$('form').off('submit').on('submit',doFormStuff);
Поскольку формы обычно имеют имена или идентификаторы, вы также можете просто прикрепить их к новой форме. Если я создаю много динамического материала, я включаю функцию настройки или привязки:
function bindItems(){
$('form').off('submit').on('submit',doFormStuff);
$('button').off('click').on('click',doButtonStuff);
}
Итак, всякий раз, когда вы что-то создаете (обычно кнопки в моем случае), я просто вызываю bindItems, чтобы обновить все на странице.
createNewButton();
bindItems();
Мне не нравится использовать «тело» или элементы документа, потому что с вкладками и модальными окнами они обычно остаются и делают то, чего вы не ожидаете. Я всегда стараюсь быть максимально конкретным, если это не простой одностраничный проект.
$(document).on('submit','form.remember',function(){...})