您可以使用几行自定义JavaScript代码,而不必明确点击提交按钮即可提交表单。
有几种方法可以做到这一点。
选项1-:onclick
选项
使用radio_button
助手,
<%= f.radio_button :plan_id, 1 %>
您可以添加一个onclick
选项,它需要一个JavaScript代码字符串作为参数。
<%= f.radio_button :plan_id, 1, onclick: "alert('Hello world!');" %>
在
onclick
代码中,您可以使用jQuery选择您的表单,然后提交它。您使用哪个选择器取决于您自己。
// data attributes (my preference because it's explicit and flexible)
$('[data-target=my-form]')
// using jQuery's closest() method
$(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选项
Unobtrusive JavaScript是通过JavaScript代码中的处理程序向DOM添加行为,以响应事件并相应地触发操作的过程。
此选项具有以下优点:
- 它是模块化的,可以用于其他输入字段和表单
- 它使JavaScript不出现在视图中
在这种情况下,我们将创建一个“单击提交”行为,我们可以使用它来增强您的单选按钮的行为。
首先是JavaScript事件和处理程序:
$(document).on("click", "[data-behavior=submit-on-click]", function() {
$form = $(this).closest('form');
$form.submit();
});
现在将特殊的数据属性附加到单选按钮本身,以启用该行为。
<%= f.radio_button :plan_id, 1, data: { behavior: "submit-on-click" } %>
我的惯例是使用data-behavior
数据属性,但任何选择器都可以。
这种方法的好处是,如果您有多个单选按钮,则可以通过将相同的数据属性添加到每个单选按钮来为它们全部提供相同的行为。
其他资源