Я знаю, что xhtml не поддерживает вложенные теги форм, и я уже прочитал другие ответы
здесь в stackoverflow относительно этой темы, но я до сих пор не нашел элегантного решения проблемы.
Некоторые говорят, что вам это не нужно, и что они не могут придумать сценарий, если бы это было необходимо. Ну, лично я не могу придумать сценарий, который мне не нужен.
Давайте рассмотрим очень простой пример:
Вы создаете приложение для блога, и у вас есть форма с некоторыми полями для создания нового поста и панель инструментов с «действиями», такими как «Сохранить», «Удалить», «Отмена».
<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.
Единственная проблема заключается в том, что нажатие кнопки «Удалить» отправит ВСЕ поля формы на сервер, хотя единственное, что необходимо для этого действия, - это скрытый ввод с post-id. В этом небольшом примере нет ничего сложного, но у меня есть формы с сотнями (так сказать) полей и вкладок в моих LOB-приложениях, которые (из-за требований) должны отправлять все за один раз, и в любом случае это кажется очень неэффективным и трата. Если бы вложение форм было поддержано, я бы по крайней мере смог бы обернуть кнопку «Удалить» внутри своей формы, используя только поле post-id.
Вы можете сказать «Просто добавьте« Удалить »как ссылку вместо отправки». Это было бы неправильно на многих уровнях, но самое главное, потому что побочные действия, такие как «Удалить», никогда не должны быть запросом GET.
Итак, мой вопрос (особенно к тем, кто говорит, что им не нужна вложенность форм): что ВЫ делаете? Есть ли какое-нибудь элегантное решение, которое я пропускаю, или в итоге действительно "Либо требуется javascript, либо отправьте все"?