这已经让我的项目死了几天。
我有一个标准的值表;有这样的骨架:
<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 预先渲染部分渲染时发生了错误:可能由于没有封闭的表格标签,部分渲染错误,然后被插入到表格中,从而导致问题。
真的,我被难住了。我已经广泛地寻找了这个,虽然有一些切线相关的问题,但似乎没有一个真正触及我的问题。
我期待我犯了一些非常简单的错误 - 但它是什么?
任何帮助将不胜感激!我希望我已经尽可能清楚地解释了这个问题。