我正在使用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(); 防止在页面刷新时发送查询两次,而表单实际上是有效的。