选择下拉框选项时,自动提交AJAX表单的最简单,最优雅的方法是什么?我正在创建一个管理页面,管理员可以在其中修改用户权限(“权限”存储为整数),我希望“权限”字段是一个下拉框,当管理员自动提交和更新时点击他希望用户拥有的选项。
这是我目前正在看的精简版。我需要知道将其转换为远程表单的最佳方法,该表单会在单击选项时自动提交。
随意指出任何切向性建议或其他任何内容......我对Rails相对较新,只是达到了我可以编写代码而无需不断引用他人工作的程度。
<!-- This is the "index" view, by the way. -->
<% for membership in @story.memberships %>
<% form_for membership do |f| %>
<%= f.select :permissions, [['none', 0], ['admin', 9]] %>
<% end %>
<% end %>
答案 0 :(得分:15)
有几种方法可以解决这个问题。当然观察场方法是一种,但您也可以使用简单的javascript或remote_function来实现:
这是简单的JS方法:
<% remote_form_for membership do |f| %>
<%= f.select :permissions, [['none', 0], ['admin', 9]], {}, :onchange => 'this.form.submit()' %>
<% end %>
另一种方式是这样的,并且会避开表单构建器(这可能有几个语法错误):
<%= select_tag(:permissions, [['none', 0], ['admin', 9]], {:onchange => "#{remote_function(:url => permissions_path(:story_id => story,
:with => "'permission='+value")}"})
我个人更喜欢前者。
答案 1 :(得分:4)
三个步骤!
form_for
成为remote_form_for
;添加一个id!select
observe_field
observe_field
以提交表单最后一点看起来像:
<%= observe_field "id_of_select", :function => "$('form_id').submit();" %>
答案 2 :(得分:4)
在Rails 3中:
<%= form_for(membership, :remote => true) do |f| %>`
<%= f.select :permissions, [['none', 0], ['admin', 9]], {}, :onchange => 'this.form.submit();' %>
<% end %>
请注意,this.form.submit();
不是onsubmit。并且不要忘记Javascript分号。
答案 3 :(得分:3)
使用您选择的框架了解如何在没有Rails的情况下执行此操作。使用Rails标签执行AJAX可以快速完成任务,但是当您需要更改标签的执行方式时,可能会非常有限。
了解网络标准以及如何在这些网站上编写不引人注目的JavaScript: http://ajaxian.com/ http://www.alistapart.com/
通过学习如何在没有Rails的情况下执行AJAX,您将能够创建更灵活,更精彩的UI。
答案 4 :(得分:1)
我正在使用Rails 5&amp;我也面临着类似的情况,但在我的情况下,@ scott给出的答案并未按预期使用AJAX
提交表单,尽管我在表单中添加了remote: true
选项(我没有{表格中的{1}}按钮。
如果有人也遇到类似问题,请尝试更改这样的JS代码 -
submit
希望这会有所帮助..