私は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 %>
生成される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="✓" />
<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>
助けてくれてありがとう。
これは私がそれを機能させるためにできたことです。 :name => "switch_car"を使用してフォームにswitch_carという名前を付け、次のjavascriptを使用しました。
:onchange => ("javascript: document.switch_car.submit();")
私はまだより良い答えを探しているので、何か見つけたら更新します。これは、何らかの理由でsubmit.jsを使用しません。 AJAXを使用して、変化するページ要素のみを更新する送信ボタンとは異なり、HTMLとして処理します。しかし、これは私がこれまでに見つけた中で最高のものです。
Onchangeをこれに置き換えます。
onchange: "this.form.submit();"
フォームが_remote: true
_であり、_Rails-ujs
_が使用されている場合、this.form.submit()
は機能しません。その場合、XHRの代わりに定期的な送信が行われます。
代わりに、次のことを行う必要があります。
_onchange: 'Rails.fire(this.form, "submit")'
_
詳細については、 ここ を読むことができます。
使用しているjsライブラリに応じて:
プロトタイプ::onchange => ("$('switch_car').submit()")
Jquery::onchange => ("$('#switch_car').submit()")
デフォルトを使用していて、Railsバージョンが3.1未満の場合、プロトタイプがデフォルトのライブラリです。
これはしばらく前からあったようですが、この説明はまだどこにも見つからないので、とにかく調査結果を投稿します。
私はこれに出くわしました 記事 これはsubmit()
メソッド(jQueryまたはハンドラーの有無にかかわらず)を介してajaxリクエストをトリガーするときの問題を非常によく説明しています。次に、作成者は独自のAJAXリクエストを作成することをお勧めします。これは必須ではなく、 Rails.js (jquery- jus gem)。
Rails.jsが_submit.Rails
_という名前空間のイベントをバインドしてリッスンするため、submit()
のトリガーに関する問題が手動で発生します。送信を手動でトリガーするには
_ onchange: 'javascript: $( this ).trigger("submit.Rails")'
_
要素またはフォームに。
JQueryを使用したより一般的な解決策(フォームの名前を知る必要はありません)は次のとおりです。
onchange: "$(this).parent('form').submit();"
Select_tagの場合は、次を追加するだけです。
{:onchange => "myHandler();" }
ハンドラーは次のようになります。
this.form.submit();
また、onchangeが機能しない場合は、大文字のCを使用してonChageを試してみてください。
最後に、select_tagをフォームselectと混同しないように注意してください。
フォームの選択に関してのみ、同様の質問に対する私の回答を参照してください
Railsフィールドでのajax送信の変更方法を学びたい場合は、ここにコードがあります。
<%= select_tag(:id, options_from_collection_for_select(active_cars, "id", "name"),
data: { remote: true, url: your_ajax_route_path }%><%= submit_tag "Switch Car" %>
データ:{リモート:true、URL:your_ajax_route_path}
入力をyour_ajax_route_pathに自動的に送信します。フォームビルダーを使用している場合は、input_htmlとともに使用する必要があります
input_html: { data: { remote: true, url: your_ajax_route_path } }
このような。お役に立てば幸いです
どのソリューションも機能していなかったので、以下のソリューションを使用しました。
$("#q_dimension_id_eq").on("change", function (e) {
$(this).closest("form").submit();
});