[英]Rails: submit (via AJAX) when drop-down option clicked
选择下拉框选项时,自动提交 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 %>
有几种方法可以处理这个问题。 当然,观察场方法是一种,但您也可以使用简单的 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")}"})
我个人更喜欢前者。
三步!
form_for
成为remote_form_for
; 加个身份证!observe_field
之后添加一个观察select
observe_field
以提交您的表单最后一点看起来像:
<%= observe_field "id_of_select", :function => "$('form_id').submit();" %>
在 Rails 3 中:
<%= form_for(membership, :remote => true) do |f| %>`
<%= f.select :permissions, [['none', 0], ['admin', 9]], {}, :onchange => 'this.form.submit();' %>
<% end %>
请注意,它是this.form.submit();
不提交。 不要忘记 Javascript 分号。
了解如何在没有 Rails 的情况下使用您选择的框架来完成它。 使用 Rails 标签执行 AJAX 可以快速完成任务,但是当您需要更改标签执行方式的特定内容时可能会受到很大限制。
在这些网站上阅读网络标准以及如何编写不引人注目的 javascript: http://ajaxian.com/ http://www.alistapart.com/
通过学习如何在没有 Rails 的情况下执行 AJAX,您将能够创建更灵活、更令人惊叹的 UI。
我正在使用 Rails 5,我也面临类似的情况,但在我的情况下,@scott 给出的答案没有按预期使用AJAX
提交表单,尽管我在表单中添加了remote: true
选项(我没有submit
按钮)。
如果有人也面临类似的问题,请尝试像这样更改 JS 代码-
<% form_for membership remote: true, id: '#member_form' do |f| %>
<%= f.select :permissions, [['none', 0], ['admin', 9]], onchange: '$("#member_form").trigger("submit");' %>
<% end %>
希望这可以帮助..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.