为啥“提交”按钮会显示在 <form> 之前?

Posted

技术标签:

【中文标题】为啥“提交”按钮会显示在 <form> 之前?【英文标题】:Why does the "submit" button display before the <form>?为什么“提交”按钮会显示在 <form> 之前? 【发布时间】:2012-11-08 19:51:42 【问题描述】:

这有点令人惊讶。尽管在我看来我的提交标签应该出现在表单中,但它显示在表单之前。 html 源代码对我来说看起来不错,但结果显示和 DOM 是错误的。不知道什么会洗牌。提交按钮显示在表单之前。

你能看到什么吗?

查看文件:

<%= content_tag :table do %>
  <%= content_tag :thead do %>
    <% 5.times do |q| %>
      <%= content_tag :th, "1" %>
    <% end %>
  <% end %>
  <%= content_tag :tbody do %>
    <%= form_tag program_participant_round_survey_path(
        program_id: @program.id, participant_id: @participant.id, round_id: @current_round.id), :method => 'put'  do %>
      <%= render partial: 'value', collection: @values  %>
      <%= submit_tag "Save" %>
    <% end %>
  <% end %>
<% end %>

html的关键部分:

...
<tr>
  <td>
    Scaling Up vs. Scaling Out
</td>
    <td>
      <input id="values__q0" name="values[]" type="radio" value="q0" />
</td>    <td>
      <input id="values__q1" name="values[]" type="radio" value="q1" />
</td>    <td>
      <input id="values__q2" name="values[]" type="radio" value="q2" />
</td>    <td>
      <input id="values__q3" name="values[]" type="radio" value="q3" />
</td></tr>
      <input name="commit" type="submit" value="Save" />
</form></tbody></table>
  </div>
</div>
</body>
</html>

这是页面在浏览器中的样子:

这是 DOM 的样子:

【问题讨论】:

【参考方案1】:

这就是浏览器处理表格中不属于那里的元素的方式 - 它假定它们是标题并将它们移动到表格之前。

在生成的代码中,表中有 &lt;input type="submit"&gt;,但 &lt;tr&gt; 中没有。

如果您将&lt;input&gt; 包裹在&lt;tr&gt;&lt;td&gt; 中,它将不再移动到表格之前。请注意,不建议使用表格进行布局。

【讨论】:

【参考方案2】:

我不知道发生这种情况的确切原因,但我个人会这样做:

<%= form_tag program_participant_round_survey_path(
        program_id: @program.id, participant_id: @participant.id, round_id: @current_round.id), :method => 'put'  do %>
  <%= content_tag :table do %>
    <%= content_tag :thead do %>
      <% 5.times do |q| %>
        <%= content_tag :th, "1" %>
      <% end %>
    <% end %>
    <%= content_tag :tbody do %>        
      <%= render partial: 'value', collection: @values  %> 
    <% end %>
  <% end %>
  <%= submit_tag "Save" %>
<% end %>

【讨论】:

另外,这是一个品味问题,与您的问题没有直接关系,但我不会使用&lt;%= content_tag :table do %&gt; 等,而是使用&lt;table&gt;。我敢打赌,您的标记会更容易阅读,并且您现在遇到的问题也不会那么容易受到影响。 有趣的一点@jason——我认为使用 content_tag 给了我一些 Rails 魔力,但你是对的,直接标签会更容易阅读!

以上是关于为啥“提交”按钮会显示在 <form> 之前?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在jsp中提交数据后会显示的是问号

为啥使用了form表单之后页面会跳转,并且页面一片空白

如何在一个form里用多个提交按钮

一个按钮在一个表单中怎么提交两个方法,一个添加,一个删除

form表单提交方法get可以,但用post提交却不行,我想知道为啥

为啥我的 FORM 在 Ajax 调用后被提交? [复制]