Я знаю, что XHTML не поддерживает вложенные теги форм, и я уже читал другие ответы здесь на Stack Overflow относительно этой темы, но я до сих пор не нашел элегантного решения проблемы.
Некоторые говорят, что вам это не нужно, и что они не могут придумать сценарий, если бы это было необходимо. Ну, лично я не могу придумать сценарий, который мне не нужен.
Давайте посмотрим на очень простой пример:
Вы создаете приложение для блога, и у вас есть форма с некоторыми полями для создания нового сообщения и панель инструментов с «действиями», такими как «Сохранить», «Удалить», «Отмена».
<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 или отправьте все"?