Вложенные формы
Цель:
Большой интерфейс = большая форма, которая должна отправится. Визуально все разбито на закладки и в некоторых нужно подгружать ajax-ом свои мелкие формочки с кнопкой "сохранить", которые отправляют только свои данные PHP и результат появляется только в этой вкладке. Работоспособность основной формы не страдает от этого. Решение: * Напрашивается вложенность форм - к сожалению не реализуемо. * Можно при сохранении вкладки менять action общей формы и отправлять вообще все, а PHP закладки должен игнорировать лишнюю инфу. * Можно убрать все формы, а сделать div с атрибутами action, method и т.д. При нажатии "сохранить" менять div на form и отравлять ее. Как бы эмуляция вложенности форм получается. Вопрос: Может есть более простые решения? |
Приведи простой пример html-кода, демонстрирующий твою проблему.
|
<div style="border:1px solid #000;padding:10px"> Это общая форма<br> <form> <input name="a" value="a"> <div style="border:1px solid #000;padding:10px"> Это как-бы вложеная форма, подгрузилась ajax-ом, должна локально отработать, ajax-ом же, и пропасть не трогая общую форму.<br> <input name="b" value="b"><input name="file" type="file"> <input type="button" value="сохранить только input=b и файл"> </div> <input type="button" value="сохранить общую форму, нажимается в последнюю очередь"> </form> </div> В dom можно вынести "вложенную форму" из общей: отдельным окном, фреймом, position:absolute - но это не желательно, хочется что бы все было встроено в дизайн одной страницы и растягивалось/сжималось по мере появления/пропадания вложенных форм. |
Идеально было бы, что бы подформу рожал и обрабатывал один PHP скрипт и она работала в браузере локально - не зависимо входит она в состав другой формы или нет.
Пока склоняюсь к решению заменить все <form> на <div> и переделывать их (div-form-div-...) по мере необходимости.. Додумывается: можно перед отправкой общей формы, сканировать ее на наличие подформ и удалять их. Еще варианты? |
А почему input[type=button] а не input[type=submit] ?
|
Это детали, к сути дела наверное не относится.
|
Можно к примеру так сделать:
<div style="border:1px solid #000;padding:10px"> Это общая форма<br> <form action="/handler"> <input name="a" value="a"> <div style="border:1px solid #000;padding:10px"> Это как-бы вложеная форма, подгрузилась ajax-ом, должна локально отработать, ajax-ом же, и пропасть не трогая общую форму.<br> <input name="b" value="b"><input name="file" type="file"> <button type="submit" name="action" value="action1">Сохранить 1</button> </div> <button type="submit" name="action" value="action2">Сохранить 2</button> </form> </div> А /controller уже делегирует обработку в зависимости от пришедшего "action" |
С одной формой и контроллером логика кода очевиднее, это плюс.
Минус: если в общей форме, где-то вверху присобачили файл, потом отправили "подформу" то будут ждать отправки файла, который после этого уйдет прямиком в помойку. Большой файл родит паузы, вплоть до 1 минуты. |
Часовой пояс GMT +3, время: 20:32. |