我基本上想单击一个按钮,然后在用户单击另一个按钮时提交一个表单。表单已提交,但未单击按钮。
控制器中的方法(输入):
def set_everything
user.update_column(:everything_set, true)
end
然后我有一个表格:
<%= form_tag("http://someotherwebsite.com/post_method", method: :post, id:"form")%>
<%= some_field %>
<button type="button" id="form-button">Done</button>
<% end %>
然后在同一视图上,我还有另一个link_to:
<%= link_to set_everything_path, method: :put, id:"set-everything-button", style:"display:none" %>
我的Jquery代码:
$(document).ready(function(){
$('#form-button').click(function(){
$('#set-everything-button').trigger('click');
setTimeout(function(){ $('form').submit();}, 2000);
});
});
现在,我还尝试使用button_to而不是link_to,但是仍然无法单击它,而当我手动尝试时,它也可以正常工作。
答案 0 :(得分:0)
将目标网址放在按钮上的数据属性中:
<button type="button" id="form-button" data-trigger-url="<%= set_everything_path %>">Done</button>
直接在点击处理程序中发送PUT请求:
$(document).ready(function(){
$('#form-button').click(function(event){
event.preventDefault();
var form = $(this).closest('form');
var url = $(this).data('trigger-url');
$.ajax({
url: url,
method: 'PUT',
dataType: 'html',
success: function(){
form.submit()
}
})
});
});
不要忘记从控制器操作中发回200(确定)响应,以便javascript运行success
处理程序(并因此提交表单):
def set_everything
user.update_columns(everything_set: true)
head :ok, content_type: "text/html"
end