カスタムJavaScriptコードを数行挿入して送信ボタンを明示的にクリックしなくても、フォームを送信できます。
いくつかの方法があります。
オプション1 - あなたがJavaScriptコードonclick
コードで
<%= f.radio_button :plan_id, 1, onclick: "alert('Hello world!');" %>
の文字列を取りonclick
オプションを追加することができますradio_button
helper、
<%= f.radio_button :plan_id, 1 %>
を使用して:onclick
オプション
は、あなたがjQueryを使用してフォームを選択して送信することができます。どのセレクターを使用するかはあなた次第です。
// data attributes (my preference because it's explicit and flexible)
$('[data-target=my-form]')
// using jQuery's closest() method; "this" will refer to the radio button you clicked
$(this).closest(form)
// an ID or class
$("#my-form")
$(".my-form")
フォームを選択したら、あなたはそれにsubmit
メソッドを呼び出す必要があります。一緒にすべてを置く
、
<%= f.radio_button :plan_id, 1, onclick: "$(this).closest('form').submit();" %>
オプション2 - UJSオプション
控えめなJavaScriptはイベントに応答し、それに応じてアクションをトリガーするJavaScriptコード内のハンドラを経由してDOMに振る舞いを追加するプロセスです。
このオプションでは、それはモジュラーだと、他の入力フィールドに使用することができます
- 次のような利点があり、
- それはこのような状況でビュー
の外にはJavaScriptを続け形成たちその動作でラジオボタンを強化するために使用できる「クリックによる送信」動作を作成します。
まず
$(document).on("click", "[data-behavior=submit-on-click]", function() {
$form = $(this).closest('form'); // select the form
$form.submit(); // submit it
});
今すぐラジオボタン自体に特別なデータ属性を追加するJavaScriptのイベントハンドラは動作を有効にします。
<%= f.radio_button :plan_id, 1, data: { behavior: "submit-on-click" } %>
私の規則はdata-behavior
データ属性を使用することですが、どのセレクタは大丈夫です。
このアプローチの素晴らしい点は、複数のラジオボタンがある場合、それぞれに同じデータ属性を追加するだけで、同じ動作を与えることができることです。
その他のリソース