Форма внутри формы, это хорошо? [Дубликат]

128

Можно ли иметь форму внутри другой формы?. Есть ли проблемы с этим.

  • 2
    Несмотря на то, что OP этого не требует, вот правильное решение для нескольких кнопок внутри одной формы.
Теги:
forms

9 ответов

163
Лучший ответ

Хотя вы можете иметь несколько элементов <form> на одной странице HTML, вы не можете их вложить.

72

Нет. HTML явно запрещает вложенные формы.

Из проект HTML 5:

Модель контента:    Содержимое потока, но без потомков элемента формы.

Из Рекомендация HTML 4.01:

<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- interactive form -->

(Обратите внимание на раздел - (FORM)).

67

Вложенность форм может быть достигнута с помощью нового атрибута формы элемента ввода HTML5. Хотя мы не структурируем формы гнезда, входы оцениваются так, как они находятся в их собственной форме. В моих тестах поддерживаются 3 основных браузера, кроме IE (IE11). Ограничение на вложение формы было большим препятствием для разработки HTML-интерфейса.

Вот пример кода, когда вы нажимаете кнопку "Сохранить", вы должны увидеть "2 3 успеха" (оригинал http://www.impressivewebs.com/html5-form-attribute/):

<form id="saveForm" action="/post/dispatch/save" method="post"></form>
<form id="deleteForm" action="/post/dispatch/delete" method="post"></form>

<div id="toolbar">
    <input type="text" name="foo" form="saveForm" />
    <input type="hidden" value="some_id" form="deleteForm" />
    <input type="text" name="foo2" id="foo2" form="saveForm" value="success" />

    <input type="submit" name="save" value="Save" form="saveForm" onclick="alert(document.getElementById('deleteForm').elements.length + ' ' + document.getElementById('saveForm').elements.length + ' ' + document.getElementById('saveForm').elements['foo2'].value);return false;" />
    <input type="submit" name="delete" value="Delete" form="deleteForm" />
    <a href="/home/index">Cancel</a>
</div>
  • 11
    Это то, чего мы все ждали! Позор для IE ... всегда позади остальных ... Это делает эту замечательную идею бесполезной для публичных сайтов ...
  • 1
    3 основных браузера поддерживают это ... остальное остальное;)
Показать ещё 2 комментария
7

Вложенные формы не поддерживаются и не являются частью стандарта w3c (как многие из вас заявили).

Однако HTML5 добавляет поддержку входных данных, которые не должны быть потомками любой формы, но могут быть представлены в нескольких формах - с использованием атрибута "form". Это точно не позволяет вложенные формы, но с помощью этого метода вы можете имитировать вложенные формы.

Значение атрибута "form" должно быть id формы или в случае нескольких форм, отдельный идентификатор формы с пробелом.

Здесь вы можете прочитать

7

Если у вас есть основная форма и вы вынуждены иметь "форму с формой" Вот что вы можете сделать... в моем случае у меня была ссылка в globalHeader, и я хотел выполнить запись, когда она была щелкнул:

Пример формы сообщения с кнопкой ссылки submit:

Вместо формы... оберните свой ввод в div:

 <div id="gap_form"><input type="hidden" name="PostVar"/><a id="myLink" href="javascript:Form2.submit()">A Link</a></div>

js файл:

$(document).ready(function () {
(function () {
    $('#gap_form').wrap('<form id="Form2" action="http://sitetopostto.com/postpage" method="post" target="_blank"></form>');
})();});

Это будет охватывать все внутри div "gap_form" внутри формы "на лету", и ссылка представит эту форму. У меня есть этот пример, который теперь работает на странице... (В моем примере... Вы могли бы сделать то же самое, перенаправившись на новую страницу и представив форму на этой странице... но мне это нравится лучше)

  • 5
    Зачем понижать рабочее решение? Вы не должны понижать голос, не оставляя отзыв о том, почему ...
  • 22
    Хорошо, понижение и объяснение. (1) Это не решает неотъемлемую проблему «формы в форме». Да, вы обманули браузер во вложенные формы. Congrats. Но теперь ваш документ недействителен, и у браузера есть лицензия, чтобы делать все, что угодно. И я гарантирую, что где-то есть браузер, который выдаст ошибку. (2) Это превращает все в ад, если по какой-либо причине JS отключен, скрипты не хотят загружаться или что-то в этом роде. Может быть, вас это не волнует, но это дерьмовый дизайн - полагаться на JS, чтобы исправить ситуацию, а не на создание корректного HTML.
3

Другим обходным решением было бы инициировать модальное окно, содержащее его собственную форму

  • 0
    У вас есть пример?
3

Да, есть. Это неверно. Это не сработает, потому что это неправильно. Большинство браузеров будут видеть только одну форму.

http://www.w3.org/MarkUp/html3/forms.html

  • 4
    Спецификация HTML 3 не очень хорошая для ссылки - она умерла, не достигнув статуса Рекомендации.
  • 1
    Зачем ссылаться на старую спецификацию? HTML 3.0? Есть более новые спецификации ...
Показать ещё 3 комментария
2

Недействительный XHTML должен иметь вложенные формы. Однако вы можете использовать несколько кнопок отправки и использовать serveride script для запуска разных кодов в зависимости от того, на какую кнопку нажали пользователи.

1

Нет, мы не можем вложить формы в другую форму, подобную этой

<form name='form1'>
      <form name='form2'>
            //some code here
      </form>
</form>

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню