我有一个包含3个输入字段,笔画,推杆和GIR的表单:
<%= form_for(@played_hole) do |f| %>
<%= f.hidden_field :hole_par, value: @hole.par %>
<%= f.label :strokes, "How many strokes?" %>
<%= f.select(:strokes, options_for_select(generate_strokes_array(@hole.par), selected: @hole.par)) %>
<%= f.label :putts, "How many putts?" %>
<%= f.select :putts, options_for_select(generate_putts_array(5), selected: 1), onclick: calculateGIR() %>
<%= f.label :GIR, "Green in Regulation?" %>
<%= f.select(:GIR, [['Yes', 1], ['No', 0]]) %>
<%= f.submit "Next Hole", class: "btn btn-large btn-success" %>
<% end %>
我的目标是在用户点击第二个输入推杆后自动选择第三个字段(:GIR)。例如,如果洞是标准杆4并且他们在:stroke字段中选择5并且在:putts字段中选择2,那么我会知道他们没有获得绿色法规。所以,我想自动切换:GIR选择'否'。
我目前在注册onclick()事件时遇到了麻烦。我已将onclick: calculateGIR()
添加到:putts select字段,但我在PlayedHole #new视图中收到此错误:undefined method calculateGIR' for #<#<Class:0xb5a684c4>:0xb591eac8>
我已将此添加到javascript / plays_holes.js文件中:function calculateGIR() { alert("calculating GIR"); }
但很明显它没有被提取。
基本上,我可以在视图中使用一些帮助调用javascript(或jQuery)函数。然后,一旦我得到了这个设置,我想弄清楚如何从中选择值:stroke和:putts来计算GIR。
对于那些好奇的人来说,一个GIR意味着你在2杆(或更少)的击球中击球,而不是洞的杆位。即,3 - 1冲程,4 - 2冲程,5 - 3(或更少)冲程。
我正在运行Rails 3.2,以防你好奇。
谢谢!
答案 0 :(得分:1)
您需要将calculateGIR()
放在引号中:
<%= f.select :putts, options_for_select(generate_putts_array(5), selected: 1), onclick: "calculateGIR()" %>
onclick
HTML属性应该是一个JavaScript代码字符串,将在点击时执行。相反,您正在尝试调用Ruby方法calculateGIR
。
答案 1 :(得分:0)
替代我在您的问题中的评论:
尝试:
<%= f.select :putts, options_for_select(generate_putts_array(5), selected: 1), onclick: 'calculateGIR()' %>
,将calculateGIR()
放入 引号。
最好不要将javascript放入HTML中,如图所示。 Unobstrusive这样做的方法是将id
分配给select
元素,并在更改事件中应用calculateGIR
逻辑。
以下内容更好:
在您看来:
<%= f.select :putts, options_for_select(generate_putts_array(5), selected: 1), {}, id: 'putts' %>
在javascript/played_holes.js
$(document).ready(function() {
$('#putts').on('change', function() {
// Place definition of calculateGIR() here.
});
});