Come posso utilizzare jQuery UJS per inviare un modulo dopo che l'evento di modifica di una casella di selezione viene attivato in Rails?Come posso utilizzare jQuery UJS per inviare un modulo tramite AJAX dopo che l'evento di modifica di una casella di selezione viene attivato in Rails?
mio punto di vista è simile al seguente:
<% for perm in @permissions %>
<%= form_for [@brand,perm], { :remote => true } do |f| %>
<tr id="permission_<%= perm.id %>">
<td><%= perm.configurable.name %></td>
<td><%= f.select :action, ['none', 'read', 'update', 'manage'] %></td>
</tr>
<% end %>
<% end %>
piuttosto semplice. Il mio controller è in questo modo:
class PermissionsController < ApplicationController
before_filter :authenticate_user!
respond_to :html, :js
load_and_authorize_resource :brand
load_and_authorize_resource :permission, :through => :brand
def index
end
def update
@permission = Permission.find(params[:id])
@permission.update_attributes(params[:permission])
end
end
E nei miei application.js:
// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults
$(function() {
$("#permission_action").change(function() {
this.form.submit(); // This needs to be an AJAX call, but how?
});
})
prega di notare che il modulo di presentazione fuochi bene. Ma sta facendo un post normale piuttosto che un invio AJAX. Quando inserisco un pulsante di invio nel modulo e lo utilizzo, l'invio AJAX funziona correttamente. Devo cambiare:
this.form.submit();
per una chiamata AJAX, ma non so come. Qualcuno può aiutare?
Grazie Hugo. Oggi ho visto questo screencast e ho provato l'esempio. Per fare riferimento al modulo, ho usato "this.form.submitWithAjax();" poiché sto cercando di fare riferimento al modulo dall'evento di modifica di una casella di selezione. Continuavo a ricevere "submitWithAjax non è una funzione". – AKWF
Non sono in grado di provare questo, ma puoi modificare la riga this.submit (....) nella definizione submitWithAjax a this.form.submit (....). Forse hai provato idk. Fammi sapere. – Hugo
Sì, non esiste una combinazione di questo che funzioni per me. È molto, molto frustrante. Alla fine ho avuto questo lavoro:. $ ("# permission_action") Change (function() { \t \t $ .ajax ({ tipo: "PUT", url: this.form.action, Dati : "permesso [azione] =" + $ ("# permesso_azione"). Val() }); return false; }); ma ha funzionato solo per la LINEA MOLTO PRIMA! Ogni riga sullo schermo ha un modulo con una casella di selezione chiamata "permission_action". Non ero a conoscenza del fatto che jQuery si legasse solo al primo elemento di un nome particolare per impostazione predefinita. – AKWF