繁体   English   中英

Rails:单击下拉选项时提交(通过 AJAX)

[英]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")}"})

我个人更喜欢前者。

三步!

  1. 使您的form_for成为remote_form_for 加个身份证!
  2. 在您的observe_field之后添加一个观察select
  3. 配置您的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM