2016-02-29 2 views
0

У меня есть следующий снимок выбора в моих рельсах. Я ниже синтаксис от API (http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_select):Как вы добавляете onchange к коллекции_select?

collection_select (объект, метод, сбор, value_method, text_method, опции = {}, 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.

ответ

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()"}) %> 
+0

Это заставило меня пройти за исключением синтаксиса, однако это не дает мне предупреждение диалога, поэтому я не знаю, почему эта функция не срабатывает, когда я изменяю выпадающие значения. – A21

+0

Моя ошибка, мой знак

0

Я считаю, что вместо options = или html_options = вам нужно передать сам фактический хэш (как вы на самом деле сделал с include_blank => true). Я бы выделил только эти хеши с фигурными скобками, чтобы их разделить:

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

Надеюсь, это поможет.

EDIT:

Я забыл добавить, что если updateTextArea() функция JS не связывается с окном может возникнуть проблема с подбором его (я имел аналогичные проблемы в прошлом). Для безопасности я бы делать (если вы не используете CoffeScript):

window.updateTextArea = function() { /* Your code */ } 
Смежные вопросы