我在使用 Rails 4、Turbolinks 和远程表单时遇到了一个相当奇怪的问题。我有一个看起来像的表格:
<%= form_for [object], remote: true do |f| %>
<td><%= f.text_field :name, class: 'form-control' %></td>
<td><%= f.email_field :email, class: 'form-control' %></td>
<td><%= f.submit button_name, class: 'btn btn-sm btn-primary' %></td>
<% end %>
此表单添加(创建)一个新对象。然而,它并不总是有效:
- 当我直接使用 URL 或刷新加载页面时;有用
- 当我从我的应用导航到此页面时;它失败
禁用此链接的 Turbolinks 时,该页面运行良好。
我有两个问题:
- 为什么这不起作用?这是因为远程处理程序由于 JQuery/Turbolinks 问题而没有附加到按钮上吗?
- 我该如何解决这个问题?
提前致谢。
解决方案
感谢@rich-peck,解决方案是添加一段javascript,在单击按钮时手动提交表单:
<%= javascript_tag do %>
var id = "#<%= dom_id(f.object) %>";
var inputs = $(id).parent().find('input');
console.log(inputs);
$(id).parent().find('button').on('click', function(e) {
e.preventDefault();
$(id).append(inputs.clone());
$(id).submit();
});
<% end %>
此代码将 javascript 添加到表单表行,获取输入,将它们附加到 ID 并提交表单。preventDefault(); 防止在刷新页面并且表单实际工作时发送两次查询。