单击Rails form_for选择字段后激活Javascript函数

时间:2013-09-06 20:54:17

标签: javascript ruby-on-rails forms onclick

我有一个包含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,以防你好奇。

谢谢!

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.
  });
});