Можете ли вы вложить HTML формы? - PullRequest
410 голосов
/ 19 декабря 2008

Возможно ли вложить html формы, подобные этой

<form name="mainForm">
  <form name="subForm">
  </form>
</form>

чтобы обе формы работали? У моего друга проблемы с этим, часть subForm работает, а другая - нет.

Ответы [ 21 ]

2 голосов
/ 29 июля 2018

Вы также можете использовать formaction = "" внутри тега кнопки.

<button type="submit" formaction="/rmDog" method='post' id="rmDog">-</button>

Это будет вложено в исходную форму в виде отдельной кнопки.

2 голосов
/ 22 января 2016

Хотя я не представляю решение для вложенных форм (оно не работает надежно), я предлагаю обходной путь, который работает для меня:

Сценарий использования: суперформа, позволяющая изменять N предметов одновременно. Он имеет кнопку «Отправить все» внизу. Каждый элемент хочет иметь свою собственную вложенную форму с кнопкой «Отправить элемент № N». Но не могу ...

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

<form>
    <div id="item1">
        <input type="text" name="foo_1" value="23">
        <input type="submit" name="submit_1" value="Submit Item #1">
    </div>
    <div id="item2">
        <input type="text" name="foo_2" value="33">
        <input type="submit" name="submit_2" value="Submit Item #2">
    </div>
    <input type="submit" name="submitAll" value="Submit All Items">
</form>

Хорошо, не так уж много изобретений, но это делает работу.

2 голосов
/ 19 декабря 2008

Даже если бы вы могли заставить его работать в одном браузере, нет гарантии, что он будет работать одинаково во всех браузерах. Таким образом, хотя вы могли бы заставить его работать в времени, вы определенно не сможете заставить его работать все времени.

2 голосов
/ 22 октября 2009

У вас даже могут возникнуть проблемы с тем, чтобы он работал в разных версиях одного и того же браузера. Поэтому избегайте этого.

1 голос
/ 22 июня 2015

Используйте пустой тег формы перед вложенной формой

Проверено и работало на Firefox, Chrome

Не проверено на I.E.

<form name="mainForm" action="mainAction">
  <form></form>
  <form name="subForm"  action="subAction">
  </form>
</form>
1 голос
/ 10 октября 2012

О вложенных формах: один день я провел 10 лет, пытаясь отладить сценарий ajax.

мой предыдущий ответ / пример не учитывал разметку html, извините.

<form id='form_1' et al>
  <input stuff>
  <submit onClick='ajaxFunction(That_Puts_form_2_In_The_ajaxContainer)' >
  <td id='ajaxContainer></td>
</form>

form_2 постоянно терпел неудачу, говоря неверную form_2.

Когда я переместил ajaxContainer, который создал form_2 <i>outside</i> form_1, я вернулся в бизнес. Это ответ на вопрос, почему можно вкладывать формы. Я имею в виду, на самом деле, какой идентификатор, если не определить, какую форму использовать? Должна быть лучшая, приятная работа вокруг.

0 голосов
/ 17 декабря 2018

Действительно невозможно ... Я не мог вложить теги формы ... Однако я использовал этот код:

<form>
    OTHER FORM STUFF

    <div novalidate role="form" method="post" id="fake_form_id_0" data-url="YOUR_POST_URL">
        THIS FORM STUFF
    </div>
</form>

с {% csrf_token %} и прочим

и применил немного JS

var url = $(form_id).attr("data-url");

$.ajax({
  url: url,
  "type": "POST",
   "data": {
    'csrfmiddlewaretoken': '{{ csrf_token }}',
    'custom-param-attachment': 'value'
  },
  success: function (e, data) {
      if (e.is_valid) {
         DO STUFF
      }
  }
});
0 голосов
/ 11 сентября 2018

Нет, вы не можете иметь вложенную форму. Вместо этого вы можете открыть модал, содержащий форму и выполнить отправку формы Ajax.

0 голосов
/ 11 сентября 2018

Прежде чем я знал, что не должен был этого делать, у меня были вложенные формы для нескольких кнопок отправки. Пробежал так 18 месяцев, тысячи регистрационных транзакций, никто не звонил нам о каких-либо трудностях.

Вложенные формы дали мне идентификатор для анализа на правильное действие. Не сломался, пока я не попытался прикрепить поле к одной из кнопок, и Валидат пожаловался. Ничего страшного в этом не было - я использовал явное stringify во внешней форме, поэтому не имело значения, что submit и форма не совпадали. Да, да, надо было взять кнопки от отправки на клик.

Дело в том, что существуют обстоятельства, когда он не полностью нарушен. Но «не полностью сломанный», возможно, слишком низкий стандарт, чтобы стрелять: -)

0 голосов
/ 26 мая 2014

Хотя вопрос довольно старый, и я согласен с @everyone, что в HTML не допускается вложение форм

Но это то, что все, возможно, захотят увидеть это

где вы можете взломать (я называю это взломом, поскольку я уверен, что это не законно) HTML, чтобы браузер имел вложенную форму

<form id="form_one" action="http://apple.com">
  <div>
    <div>
        <form id="form_two" action="/">
            <!-- DUMMY FORM TO ALLOW BROWSER TO ACCEPT NESTED FORM -->
      </form>
    </div>
      <br/>
    <div>
      <form id="form_three" action="http://www.linuxtopia.org/">
          <input type='submit' value='LINUX TOPIA'/>
      </form>
    </div>
      <br/>

    <div>
      <form id="form_four" action="http://bing.com">
          <input type='submit' value='BING'/>
      </form>
    </div>
      <br/>  
    <input type='submit' value='Apple'/>
  </div>  
</form>

JS FIDDLE LINK

http://jsfiddle.net/nzkEw/10/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...