Rails尝试在下拉列表中提交表单

Xax*_*xum 16 forms submit ruby-on-rails-3

我有我的Ajax工作,内置Rails javascript,提交按钮.但是,当我更改下拉框的值并取消按钮时,我希望它提交.在我的研究中,我发现了什么看起来是正确的解决方案,但我没有得到服务器的请求.这是我的下拉表单代码,请注意它在我添加之前仍然有提交按钮:onchange:

<% form_tag('switch_car', :method => :put, :remote => true) do %>
  <div class="field">
    <label>Car Name:</label>
    <%= select_tag(:id, options_from_collection_for_select(active_cars, "id", "name"), 
       :onchange => ("$('switch_car').submit()"))%><%= submit_tag "Switch Car" %>
  </div>    
<% end %>
Run Code Online (Sandbox Code Playgroud)

这是生成的HTML:

<form accept-charset="UTF-8" action="switch_car" data-remote="true" method="post">
  <div style="margin:0;padding:0;display:inline">
    <input name="utf8" type="hidden" value="&#x2713;" />
    <input name="_method" type="hidden" value="put" />
    <input name="authenticity_token" type="hidden" value="PEbdqAoiik37lcoP4+v+dakpYxdpMkSm7Ub8eZpdF9I=" />
  </div>
  <div class="field"> 
    <label>Car Name:</label> 
    <select id="id" name="id" onchange="$('switch_car').submit()">
      <option value="9">Truck</option>
      <option value="10">Car</option>
    </select>
    <input name="commit" type="submit" value="Switch Car" /> 
</div> 
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.

kon*_*yak 20

用这个替换你的onchange,

onchange: "this.form.submit();"
Run Code Online (Sandbox Code Playgroud)

  • 使用`rails-ujs`时不会触发ajax。请参阅下面的详细信息。 (3认同)

gam*_*ela 12

this.form.submit()如果表单正在使用中remote: true,rails-ujs则无效.在这种情况下,将定期提交而不是XHR.

相反,你应该:

onchange: 'Rails.fire(this.form, "submit")'
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读更多细节.

  • 为了保持其公开,请打开 _app/javascript/packs/application.js_ 并将其放回全局下,例如 `import Rails from '@rails/ujs'; 全局.Rails = Rails;`。 (4认同)
  • 而在 Rails 6 中,Rails 不再暴露了……我的头发因不断贬低的一切而变白。 (3认同)

Xax*_*xum 6

这是我能够做到的.我使用:name =>"switch_car"将表单命名为switch_car,并使用以下javascript.

:onchange => ("javascript: document.switch_car.submit();")
Run Code Online (Sandbox Code Playgroud)

我仍然在寻找更好的答案,所以如果我找到了什么,我会更新.由于某种原因,这不使用submit .js.它将其作为HTML处理,而不像使用AJAX仅更新更改的页面元素的提交按钮.但这是迄今为止我能找到的最好的.


JRS*_*ird 6

这是一个老问题,但以上答案都不适合我。它们都会产生一个 text/html 请求。

以下作品,例如(隐藏类设置CSS显示:无):

<%= form.radio_button :tier_id, tier.id, onchange: "$('#submit-button-id').click();" %>
Run Code Online (Sandbox Code Playgroud)

和...一起:

<%= form.submit "Save changes", id: 'submit-button-id', class: 'hide' %>
Run Code Online (Sandbox Code Playgroud)

  • 我想说的是,使用submit_tag,您可以将隐藏参数设置为true,例如“hidden:true”,它将隐藏按钮。这适用于 Rails 6 (2认同)

ami*_*ena 5

取决于您使用的js库:

原型: :onchange => ("$('switch_car').submit()")

jQuery的: :onchange => ("$('#switch_car').submit()")

如果您使用默认值并且rails版本低于3.1,则prototype是默认库.