Ответ 1
Вы можете просто использовать .submit();
$("#my-form").submit();
В моем приложении rails у меня есть удаленная форма, которая выглядит примерно так:
<%= 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 %>
Теперь я хотел бы отправить эту форму через javascript и вызвать все обратные вызовы удаленной формы rails. До сих пор я пробовал несколько вещей, но ничего не работает.
Вещи, которые я пробовал:
$('#my-form').trigger('onsubmit')
$.rails.callFormSubmitBindings( $('#search-form') )
но пока не повезло. Любые идеи?
Вы можете просто использовать .submit();
$("#my-form").submit();
Это просто путь Rails:
$("#myform").trigger('submit.rails');
В Rails 5.1+, который заменяет старый jquery-ujs
не-jquery rails-ujs
, вышеупомянутые ответы больше не работают, всегда отправляя форму через HTTP-запрос HTML. Вот как вы запускаете новый обработчик событий rails submit:
var elem = document.getElementById('myform') // or $('#myform')[0] with jQuery
Rails.fire(elem, 'submit');
(Не могу сказать, сколько времени мне потребовалось, чтобы понять это...) По какой-то причине регулярные события не прилипают должным образом к делегированному обработчику событий прикрепленный рельсами, используя новую функцию , когда они запускаются jQuery.
Как насчет использования rails_ujs
и просто сделайте следующее:
Rails.fire(form, 'submit');
(где form
- это элемент DOM)
Это похоже на правильный способ Rails сделать это.
Вы можете проверить источник здесь - https://github.com/rails/rails/blob/master/actionview/app/assets/javascripts/rails-ujs/utils/event.coffee#L34
Как насчет передачи json из контроллера и захвата его js.
Теперь действие контроллера как
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
И захват json в js как
$('#my-form').bind 'ajax:success', (event,data) ->
if(data.success == true)
...
Не совсем то, что вы ищете, но надеюсь, что это окажет любую помощь.
Ответ @mltsy идеально подходит для меня. Тем не менее, хотел бы повторить, что это требует использования rails-ujs. Если вы обновили более старую версию, как я, вы все равно можете использовать jquery-зависимый jquery_ujs. Если вы получаете ReferenceError: Can't find variable: Rails
в вашей консоли, проверьте ваш application.js и убедитесь, что у вас есть rails-ujs или @mltsy, отличный ответ не сработает. Я хотел оставить комментарий вместо ответа, но Стек не позволил мне.