我试图在页面加载jQuery时自动触发rails表单提交。我已经遵循了几个Stackoverflow建议,例如$(“form”)。submit()和$(“form”)。trigger(“submit.rails”)但没有成功。这是我的代码:
Rails索引:
<%= form_for [@topic], remote: :true, id: "article-topic" do |f| %>
<p>
<%= f.label :name %>
<%= f.text_field :name, id: "topic-name" %>
</p>
<%= f.submit %>
<% end %>
的jQuery :
$(document).ready(function(){
$("#topic-name").val("test");
$("#article-topic").submit();
});
修改: 没关系,我想通了。 Rails会自动为表单分配自己的ID,因此我分配的那个ID没有被正确选取。使用:html =&gt; {:id =&gt; “文章主题”}做了伎俩。
答案 0 :(得分:1)
为了给你一个提示,Rails只在你的页面上创建HTML forms,所以如果你在将一些事件绑定到你的DOM时遇到问题,那么很可能是一个JS问题
由于您已经解决了这个问题,我只想详细说明您需要考虑的几点:
- Turbolinks
- 提交
醇>
-
<强> Turbolinks 强>
如果您在系统中使用Turbolinks,则$(document).ready
的通话不会长时间停留 - 您最好使用其中一个Turbolinks event handlers,像这样:
var submit_action = function(){
//do stuff here
}
$(document).on("page:load ready", submit_action);
-
提交强>
其次,您只需为您的表单调用标准submit
事件即可。我之前从未见过submit:rails
- 只有submit
这样:
$(#form).on("submit", function(){
// do something here
});
答案 1 :(得分:0)
Rails会自动为表单生成一个ID,所以我不得不改变我分配ID的方式。我将表单更新到下面,现在工作正常:
<%= form_for [@topic], remote: :true, id: "article-topic", :html => { :id => "article-topic" } do |f| %>
<p>
<%= f.label :name %>
<%= f.text_field :name, id: "topic-name" %>
</p>
<%= f.submit %>
<% end %>