【发布时间】:2019-07-20 03:40:14
【问题描述】:
我基本上想单击一个按钮,然后在用户单击另一个按钮时提交一个表单。表单被提交,但按钮没有被点击。
控制器中的方法(put):
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,但它仍然没有被点击,当我手动尝试时它工作得很好。
【问题讨论】:
-
为什么不将
user.update_column(:everything_set, true)添加到表单所在的控制器操作中? -
试试这个
user.update_column(everything_set: true)。另外,请记住,当您使用update_column时,会绕过所有常规更新过程。这意味着跳过验证、跳过回调并且不更新时间戳。 -
为什么不直接通过
$.ajax在您的#form-button点击处理程序中发送PUT 请求?您可以将目标网址存储在按钮上的数据属性中。 -
这段代码似乎在很多方面都可能被破坏。不过,首先,您使用的是
turbolinks吗? -
我不明白用例。为什么 2000 毫秒超时?表单按钮正在触发表单提交(因为您没有取消它),那么链接上的“点击”将触发另一个请求,然后在2s后您想触发另一个请求?听起来您可以只发送表格并根据同一请求执行任何 set_everything 操作,您能更好地解释一下您要做什么吗?听起来你试图以错误的方式解决问题。
标签: javascript jquery ruby-on-rails forms methods