12

ドロップダウンボックスのオプションが選択されているときに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 %>
4

5 に答える 5

15

これを処理する方法はいくつかあります。確かに、フィールドの監視アプローチは1つですが、単純なjavascriptまたはremote_functionを使用してそれを行うこともできます。

簡単なJSアプローチは次のとおりです。

<% remote_form_for membership do |f| %>
    <%= f.select :permissions, [['none', 0], ['admin', 9]], {}, :onchange => 'this.form.submit()' %>
<% end %>

もう1つの方法は次のようなもので、フォームビルダーを避けます(これにはいくつかの構文エラーがある可能性があります)。

<%= select_tag(:permissions, [['none', 0], ['admin', 9]], {:onchange => "#{remote_function(:url  => permissions_path(:story_id => story,
             :with => "'permission='+value")}"})

個人的には前者が好きです。

于 2009-02-26T04:18:10.887 に答える
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();。そして、Javascriptのセミコロンを忘れないでください。

于 2011-06-03T19:13:09.587 に答える
4

三段!

  1. あなたをform_for作るremote_form_for; ID追加!
  2. の後に を追加しobserve_fieldますselect
  3. observe_fieldフォームを送信するように構成する

最後のビットは次のようになります。

<%= observe_field "id_of_select", :function => "$('form_id').submit();" %>
于 2009-02-25T19:52:00.400 に答える
3

選択したフレームワークを使用して、Rails なしでそれを行う方法を学びます。Rails タグを使用して AJAX を実行すると、タスクをすばやく実行できますが、タグの実行方法に関する特定の変更が必要な場合は、非常に制限される可能性があります。

Web 標準と控えめな JavaScript の書き方については、次のサイトを参照してください: http://ajaxian.com/ http://www.alistapart.com/

Rails なしで AJAX を実行する方法を学ぶことで、より柔軟で素晴らしい UI を作成できるようになります。

于 2009-02-28T00:41:36.787 に答える
1

私は Rails 5 を使用しています & 私も同様の状況に直面していましたが、@scott からの回答は、フォームにオプションAJAXを追加したにもかかわらず、期待どおりにフォームを送信していませんでした (フォームにボタンがありません)。 .remote: truesubmit

誰かが同様の問題に直面している場合は、JS コードを次のように変更してみてください。

<% form_for membership remote: true, id: '#member_form' do |f| %>
  <%= f.select :permissions, [['none', 0], ['admin', 9]], onchange: '$("#member_form").trigger("submit");' %>
<% end %>

お役に立てれば..

于 2017-01-24T05:13:49.000 に答える