jquery - example - render js rails
enviar una forma remota de rieles con javascript (6)
En mi aplicación Rails tengo un formulario remoto que se parece a esto, por ejemplo:
<%= form_tag some_path, :method => :get, :id => ''my-form'', :remote => true do %>
<%= text_field_tag :search, params[:search], :id => ''search-field'' %>
<%= submit_tag ''Go'' %>
<% end %>
Ahora me gustaría enviar este formulario a través de javascript y activar todos los rieles de devolución de llamadas de forma remota. Hasta ahora he intentado algunas cosas pero nada parece estar funcionando.
Cosas que he probado:
$(''#my-form'').trigger(''onsubmit'')
$.rails.callFormSubmitBindings( $(''#search-form'') )
Pero no hay suerte hasta ahora. ¿Algunas ideas?
¿Qué hay de usar rails_ujs
y simplemente hacer lo siguiente?
Rails.fire(form, ''submit'');
Esto se siente como una forma correcta de Rails de hacerlo.
Puede consultar la fuente aquí: https://github.com/rails/rails/blob/master/actionview/app/assets/javascripts/rails-ujs/utils/event.coffee#L34
¿Qué tal pasar JSON desde el controlador y capturarlo por su JS.
Ahora, la acción del controlador como
respond_to do |format|
if some condition
format.json { render :json => {:success => true} }
format.html{ redirect_to some_path, :notice => "successfully created" }
else
...
end
end
Y capturando al json en js como
$(''#my-form'').bind ''ajax:success'', (event,data) ->
if(data.success == true)
...
No es exactamente lo que estás buscando, pero espero que esto te sirva de ayuda.
En Rails 5.1+, que reemplaza los antiguos jquery-ujs
con rails-ujs
no-jquery rails-ujs
, las respuestas anteriores ya no funcionan, siempre se envía el formulario a través de una solicitud HTTP HTTP. Así es como se activa el nuevo controlador de eventos de rieles:
var elem = document.getElementById(''myform'') // or $(''#myform'')[0] with jQuery
Rails.fire(elem, ''submit'');
(No puedo decirle cuánto tiempo tardé en darme cuenta de eso ...) Por alguna razón, los eventos regulares no se combinan correctamente con el controlador de eventos delegado conectado por rieles que utilizan la nueva función de delegado de rieles, cuando son activados por jQuery.
Esto es simplemente a la manera de Rails:
$("#myform").trigger(''submit.rails'');
La respuesta de @mltsy funciona perfectamente para mí. Sin embargo, quiso reiterar que esto requiere el uso de rails-ujs. Si ha actualizado desde una versión anterior como yo, es posible que aún esté utilizando jquery_ujs dependiente de jquery. Si está obteniendo ReferenceError: Can''t find variable: Rails
en su consola, verifique su application.js y asegúrese de que tenga una buena respuesta de rails-ujs o @ mltsy. Quería dejar un comentario en lugar de una respuesta, pero Stack no me deja.
Puedes usar .submit ();
$("#my-form").submit();