如何将onchange动作添加到collection_select?

时间:2016-02-29 18:42:51

标签: javascript ruby-on-rails

我的轨道中有以下选择下拉列表。我正在遵循API(http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_select)的语法:

collection_select(object,method,collection,value_method,text_method,options = {},html_options = {})

<%= collection_select(:sources, :source_id, Source.all, :id, :name, :include_blank => "Please select a source...", html_options = {:onchange => "updateTextArea()"} ) %>

function updateTextArea(){
 alert('source changed')
}

当我不包含html_options时,我可以使用下拉菜单显示数据库中的值。但是,我一直试图让onchange动作发生。

2 个答案:

答案 0 :(得分:0)

我认为选项需要在哈希中(当前你有include_blank的部分)。尝试更改此

<%= collection_select(:sources, :source_id, Source.all, :id, :name, :include_blank => "Please select a source...", html_options = {:onchange => "updateTextArea()"} ) %>

到这个

<%= collection_select(:sources, :source_id, Source.all, :id, :name, options = {include_blank: "Please select a source..."}, html_options = {:onchange => "updateTextArea()"} ) %>

答案 1 :(得分:0)

我相信代替options =html_options =您需要传递实际哈希本身(就像您实际使用include_blank => true所做的那样)。我只会用花括号明确标记这些哈希值来分隔它们:

<%= collection_select(:sources, :source_id, Source.all, :id, :name, { :include_blank => "Please select a source..."}, {:onchange => "updateTextArea()"} ) %>

希望这有帮助。

编辑:

我忘了补充一点,如果updateTextArea() JS函数没有绑定到窗口,那么拾取它可能会有问题(过去我遇到了类似的问题)。为了安全起见,我也会这样做(如果您不使用CoffeScript):

window.updateTextArea = function() { /* Your code */ }