2017-06-28 168 views
0

在我on Rails项目红宝石,我有一组滑块的形式是这样的:呼叫轨功能的onChange

<%= range_field(:subproject, :ans1, in: 0..100, id: 'slider1', :class => 'range range--light', :'data-init' => 'auto', :step => 1, :value => $project_value_1.to_i) %> 

滑块的总价值应始终等于100 FO rthe形式可提交。否则,显示错误消息。所有由该函数处理:

$sumOfProjectValues = $project_value_1.to_i + $project_value_2.to_i + $project_value_3.to_i + $project_value_4.to_i + $project_value_5.to_i 

      if $sumOfProjectValues == 100 
       message = 'Project can be saved' 
       btnStyle = 'confirmation' 
       hideDisabled = 'none' 
      else 
       message = 'Project quota must add up to 100% before saving' 
       btnStyle = 'alert' 
       hideEnabled = 'none' 
      end 

我想每次调用这个表单验证功能的价值变动(有点像在JS的方法的onChange)。 我该怎么做?

+0

你真的希望这Rails代码内或内的JS(验证语法类似于Ruby,但你在谈论的onChange JS)发生的呢? – wiesion

+0

@wiesion我更喜欢铁轨。尽管如此,Ruby没有onChange方法。这将是理想的,这就是我提到它的原因。 – JustusP

+0

我认为您需要仔细研究[ActiveRecord验证](http://guides.rubyonrails.org/active_record_validations.html) - 您可以将您的100%检查作为验证器来执行。如果它没有通过,则该对象不能被保留,并且可以传递错误消息。 – wiesion

回答

0

try代码:

$(".range").onChange(function(){ 
    var sumOfProjectValues = $project_value_1.to_i + $project_value_2.to_i + $project_value_3.to_i + $project_value_4.to_i + $project_value_5.to_i 

      if sumOfProjectValues == 100 
       alert('Project can be saved') 
      else 
       alert('Project quota must add up to 100% before saving') 
      end 
}) 
+0

不起作用。 (我修正了语法错误,但它什么也没做) – JustusP

+0

@JustusP尝试'改变'而不是'onChange' – puneet18

+0

这不会改变任何东西。值是ruby变量。你不能在JS中调用它们。 – JustusP