Frage

Was ist die einfachste und eleganteste Weg, um die automatische Senden eine AJAX-Form, wenn eine Drop-Down-Box Option ausgewählt ist? Ich bin eine Verwaltungsseite zu schaffen, wo die Admin-Benutzerberechtigungen ändern kann (wobei „Berechtigungen“ als Integer gespeichert sind), und ich würde die „Berechtigungen“ Feld wie eine Drop-Down-Box zu sein, die automatisch einreicht und aktualisiert, wenn der Administrator klickt er auf die Option, will der Benutzer haben.

Hier ist die abgespeckte Version von dem, was ich zur Zeit der Suche. Ich brauche die beste Art und Weise zu wissen, dass dies zu einer Remote-Form zu überführen, die automatisch macht geltend, wenn eine Option angeklickt wird.

Sie können ferner sonst keine tangentialen Vorschläge oder etwas darauf hin ... ich Rails relativ neu bin, und nur gerade den Punkt erreicht, wo ich Code, ohne ständig die Arbeit anderen zu verweisen.

schreiben
<!-- 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 %>
War es hilfreich?

Lösung

Es gibt ein paar Möglichkeiten, dies zu umgehen. Gewiß ist die Beobachtung Feld Ansatz ist ein, aber man könnte auch ein einfaches Javascript oder eine remote_function verwenden, um es zu tun:

Hier ist der einfache JS Ansatz:

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

Der andere Weg wäre in etwa so sein, und würde die Form Builder eschew (und dies kann ein paar Syntaxfehler):

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

Persönlich bevorzuge ich das erstere.

Andere Tipps

In drei Schritten!

  1. Machen Sie Ihre form_for ein remote_form_for ; fügen Sie eine ID
  2. Fügen Sie einen observe_field nach dem select
  3. Konfigurieren Sie Ihre observe_field Formular einreichen

Das letzte Bit sieht etwa so aus:

<%= observe_field "id_of_select", :function => "$('form_id').submit();" %>

In Rails 3:

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

Beachten Sie, dass es this.form.submit(); nicht onsubmit ist. Und vergessen Sie nicht das Javascript Semikolon.

Erfahren Sie, wie es zu tun, ohne Rails den Rahmen Ihrer Wahl. die Rails-Tags AJAX ausführt schnell eine Aufgabe erfüllen kann, kann aber sehr begrenzt, wenn Sie bestimmte Dinge ändern müssen, wie der Tag führt.

Lesen Sie mehr über Web-Standards und wie auf diesen Seiten unaufdringliche Javascript schreiben: http://ajaxian.com/ http://www.alistapart.com/

können Sie flexibler, erstaunlich UIs erstellen, indem Sie lernen, wie AJAX auszuführen, ohne Rails.

Ich bin mit Rails 5 & I wurde auch die ähnliche Situation in meinem Fall aber die Antwort von @ Scott gegeben wurde, die Einreichung nicht die Form AJAX Verwendung als erwartet, obwohl ich die remote: true Option zu dem Formular hinzugefügt (ich habe nicht submit Schaltfläche in Form).

Wenn jemand auch das ähnliche Problem konfrontiert versuchen, den JS-Code so zu ändern -

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

Hope, das hilft ..

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top