как отправить форму iframed, когда я отправляю форму на родителя (используя jquery) - PullRequest
1 голос
/ 01 ноября 2010

У меня есть форма с разделом «детализация» в кадре. Взгляните сюда:

[URL удален] нажмите «Добавить элемент»,

, и вы увидите, чтоВы можете ввести первые 5 полей и нажать «Обновить».Они будут сохранены, как и ожидалось.

Попробуйте добавить некоторые данные в раздел «винтажи» (заполните все поля) и нажмите «Сохранить и добавить».Это сохранит ваши изменения и добавит новую запись для редактирования.Это в кадре.

Сейчас.Моя проблема заключается в том, что если я заполню первые 5 полей, затем введу винтажную информацию, но не нажимаю «сохранить и добавить», только нажав «обновить», он не отправит фрейм и содержащиеся в нем данныевнутри будет потеряно.

Любые предложения о том, как я могу сделать это, также отправляют внутреннюю форму.Я уже пробовал это:

<script>
$(function(){
   $('#item_edit').submit(function(){
       alert('try');
 $('iframe').first().contents().find('.form').submit();
   });
});
</script>

На самом деле это сейчас на форме и не работает.Он будет работать, но не хочет отправлять.Кроме того, если я вручную запусту $('iframe').first().contents().find('.form').submit();, он отправит и сохранит содержимое формы детализации / сбора винограда.Поэтому я думаю, что родительская форма отправляется до того, как у дочерней формы тоже есть шанс.

Есть идеи, как этого избежать?

Джейсон

1 Ответ

1 голос
/ 01 ноября 2010

Страница, на которую вы ссылались, исчезла, поэтому я не могу посмотреть на ваш полный пример. Но вот несколько мыслей для рассмотрения ...

Когда я делаю такие вещи, я обычно избегаю создания субформы в iframe. Вместо этого я помещаю все поля в одну форму. Новые поля добавляются динамически, если необходимо, все в той же форме.

Затем вы можете отправить всю форму целиком, если вам нужно - эта часть становится легкой.

Если вам нужно отправить только часть формы, вы можете выбрать нужные поля во время отправки.

Чтобы выполнить подобную «выбранную вишню», просто создайте новый скрытый iframe с формой в нем; затем используйте [jQuery's .clone() function], чтобы скопировать поля, которые вам нужны, и вставить копии в новую скрытую форму; наконец, просто отправьте скрытую форму.

вот краткий пример , который был скомбинирован из какого-то старого кода, который у меня есть.


Альтернативный подход

Может быть, вы могли бы объединить аспект моего подхода с вашим кодом, каким он является сегодня ... У вас уже есть свои подформы в их собственном iframe - и все это работает. Проблема в том, что вам нужны данные вашей формы для отправки вместе с основными данными формы.

Таким образом, вы можете использовать clone(), как я описал выше - но в обратном направлении. Когда кнопка обновления нажата, просто clone() все, что находится внутри вашего iframe, и поместите его в скрытый div, который находится внутри вашей основной формы. Затем продолжайте и дайте форме отправить, взяв с собой все данные. Просто убедитесь, что имена ваших элементов уникальны во всех двух формах (поскольку все в конечном итоге окажется в одной и той же форме).

Может быть, что-то вроде этого:

$(function(){
   $('#item_edit').submit(function(){
       alert('try');
       var frmContents = $('iframe').first().contents().find('form > *').clone(true);
       var el = $('<div></div>');
       el.append( frmContents );
       el.css('display','none');
       $('#item_edit').append( el );
   });
});
...