1

这已经让我的项目死了几天。
我有一个标准的值表;有这样的骨架:

<table><tbody><tr><td>Stuff!</td></tr></tbody></table>

我正在尝试将内联 Rails 3 表单加载到tbody使用 jQuery 中,以让用户向表中添加新值。这是通过一个按钮完成的,该按钮获取我的控制器的新操作,该操作又调用 new.js.erb,它只是将表单的渲染部分添加到表中($("table tbody").prepend('<%= escape_javascript(render 'form') %>');)。

表单部分本身是这样的:

<tr>
  <td>
    <%= form_for @model, :remote => true do |f| %>
  </td>
  <td>
    <%= f.text_field :column %>
  </td>
  <td>
    <%= f.submit "Add" %>
    <% end %>
  </td>
</tr>

这就是混乱开始的地方:在 Webkit 浏览器和 IE 中,这按预期工作!生成的 HTML 如下所示:

<table>
  <tbody>
    <tr>
      <td>
        <form>
        </form>
      </td>
      <td>
        <input>
      </td>
      <td>
        <input type="submit">
      <td>
    </tr>
    <tr>The list of values</tr>
  </tbody>
</table>

当然,在输入开始之前,表单在同一个单元格中开始和结束的事实应该引发一个危险信号,表明出现了问题。但是,表单仍然可以提交并且可以正常工作。

在 Firefox 中,情况并非如此。表单呈现更像这样的东西(显示的只是前置行中的东西,因为其他一切都是一样的):

<td>
  <form>
  </form>
  <td>
    <input>
  </td>
  <td>
    <input type="submit">
  <td>
</td>

这里的不同之处在于,与 Webkit/IE 浏览器不同,Firefox 将所有内容都放入form标签的单元格中。此外,该表单根本不起作用 - 它甚至不提交。甚至没有请求被发送出去。

现在,从我的一些研究中,我了解到我在这里可能犯了一个巨大的错误,不同之处在于浏览器试图以不同的方式呈现我遗漏的任何内容。通过玩弄它,我发现这与 Rails 表单如何与表格交互几乎没有关系 - 如果您只是在表格中呈现部分内容,则 HTML 在浏览器之间是相同的(表单标签仍然在其他输入之前关闭但是,开始,这可能意味着我将 <% end %> 放在错误的位置!)。当我使用 jQuery 预先渲染部分渲染时发生了错误:可能由于没有封闭的表格标签,部分渲染错误,然后被插入到表格中,从而导致问题。

真的,我被难住了。我已经广泛地寻找了这个,虽然有一些切线相关的问题,但似乎没有一个真正触及我的问题。

我期待我犯了一些非常简单的错误 - 但它是什么?

任何帮助将不胜感激!我希望我已经尽可能清楚地解释了这个问题。

4

1 回答 1

2

看局部就很明显了。您有嵌套错误。如果您在某个元素(在本例中为表格单元格)中打开一个表单标签,您也需要将其关闭。在这种情况下,验证标记会有所帮助。

如果您必须使用表格,您可以在表格周围放置表单标签并将完整内容插入页面。

于 2010-11-25T00:08:50.850 回答