Я знаю, что XHTML не поддерживает вложенные теги форм, и я уже читал другие ответы здесь по поводу относительно этой темы, но я до сих пор не нашел элегантного решения проблемы.
Некоторые говорят, что вам это не нужно, и что они не могут придумать сценарий, если бы это было необходимо. Ну, лично я не могу придумать сценарий, который мне не нужен.
Давайте посмотрим на очень простой пример:
Вы создаете приложение для блога, и у вас есть форма с несколькими полями для создания нового сообщения и панель инструментов с "действиями", такими как "Сохранить", "Удалить", "Отмена".
<form
action="/post/dispatch/too_bad_the_action_url_is_in_the_form_tag_even_though_conceptually_every_submit_button_inside_it_may_need_to_post_to_a_diffent_distinct_url"
method="post">
<input type="text" name="foo" /> <!-- several of those here -->
<div id="toolbar">
<input type="submit" name="save" value="Save" />
<input type="submit" name="delete" value="Delete" />
<a href="/home/index">Cancel</a>
</div>
</form>
Наша цель - написать форму, не требующую JavaScript, просто старую HTML-форму и кнопки отправки.
Поскольку URL-адрес действия определен в теге Form, а не в каждой отдельной кнопке отправки, наш единственный вариант - опубликовать общий URL-адрес, а затем начать "if... then... else", чтобы определить имя кнопки, которая был представлен. Не очень элегантно, но наш единственный выбор, так как мы не хотим полагаться на JavaScript.
Единственная проблема заключается в том, что нажатие "Удалить" отправит ВСЕ поля формы на сервер, хотя единственное, что необходимо для этого действия, - это скрытый ввод с идентификатором пост-идентификатора. В этом небольшом примере нет ничего сложного, но у меня есть формы с сотнями (так сказать) полей и вкладок в моих LOB- приложениях, которые (из-за требований) должны отправлять все за один раз, и в любом случае это кажется очень неэффективным и трата. Если бы поддержка вложенности форм поддерживалась, я бы по крайней мере мог обернуть кнопку "Удалить" внутри собственной формы только полем post-id.
Вы можете сказать "Просто внедрите" Удалить "как ссылку вместо отправки". Это было бы неправильно на многих уровнях, но самое главное, потому что побочные эффекты, такие как "Удалить", никогда не должны быть запросом GET.
Итак, мой вопрос (особенно к тем, кто говорит, что им не нужна вложенность форм): что ВЫ делаете? Есть ли какое-то элегантное решение, которое я пропускаю, или нижняя строка на самом деле "Требуется JavaScript или отправьте все"?