0

我有一个包含 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 杆洞,他们在 :strokes 字段中选择了 5 个,在 :putts 字段中选择了 2 个,那么我就会知道他们没有在规则中获得果岭。所以,我想自动将 :GIR 选择切换为“否”。

我目前在注册 onclick() 事件时遇到了麻烦。我已添加onclick: calculateGIR()到 :putts 选择字段,但在 PlayedHole#new 视图中出现此错误:undefined method calculateGIR' for #<#<Class:0xb5a684c4>:0xb591eac8>

我已将此添加到 javascript/played_holes.js 文件中:function calculateGIR() { alert("calculating GIR"); }但显然它没有被拾取。

基本上,我可以使用一些帮助在视图中调用 javascript(或 jQuery)函数。然后,一旦我获得了该设置,我想弄清楚如何从 :strokes 和 :putts 中提取选定的值来计算 GIR。

对于那些好奇的人,GIR 意味着您在果岭上的杆数比该洞的标准杆少 2 杆(或更少)。即标准杆 3 - 1 杆,标准杆 4 - 2 杆,标准杆 5 - 3(或更少)杆。

我正在运行 Rails 3.2,以防你好奇。

谢谢!

4

2 回答 2

1

你需要加上calculateGIR()引号:

<%= f.select :putts, options_for_select(generate_putts_array(5), selected: 1), onclick: "calculateGIR()" %> 

onclickHTML 属性应该是一串将在点击时执行的 JavaScript 代码。相反,您正在尝试调用 Ruby 方法,calculateGIR.

于 2013-09-06T20:59:36.543 回答
0

替代我在您的问题中的评论:

试试:<%= f.select :putts, options_for_select(generate_putts_array(5), selected: 1), onclick: 'calculateGIR()' %>,加上calculateGIR()引号。

如您所示,最好不要将 javascript 放入您的 HTML 中。 做到这一点的不显眼的方法是为元素分配一个idselect更改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.
  });
});
于 2013-09-06T21:06:57.647 回答