Подтвердить что ты не робот

Отправить удаленную форму rails с помощью javascript

В моем приложении 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') )

но пока не повезло. Любые идеи?

4b9b3361

Ответ 1

Вы можете просто использовать .submit();

$("#my-form").submit();

Ответ 2

Это просто путь Rails:

 $("#myform").trigger('submit.rails');

Ответ 3

В 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.

Ответ 5

Как насчет передачи 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)
    ...

Не совсем то, что вы ищете, но надеюсь, что это окажет любую помощь.

Ответ 6

Ответ @mltsy идеально подходит для меня. Тем не менее, хотел бы повторить, что это требует использования rails-ujs. Если вы обновили более старую версию, как я, вы все равно можете использовать jquery-зависимый jquery_ujs. Если вы получаете ReferenceError: Can't find variable: Rails в вашей консоли, проверьте ваш application.js и убедитесь, что у вас есть rails-ujs или @mltsy, отличный ответ не сработает. Я хотел оставить комментарий вместо ответа, но Стек не позволил мне.