Установка значения текстового поля из 2D-массива в зависимости от опции выпадающего меню

0

У меня есть выпадающее меню, предоставляющее варианты для штатов США.

Массив состояний объявляется в контроллер, в этой форме:

@us_states = [
      ['Alabama', 'AL'],
      ['Alaska', 'AK'],
      ['Arizona', 'AZ']
]

Теперь у меня есть еще один массив (у контроллера тоже), который имеет число для каждого состояния, в этой форме:

@electricity_table = [
        ['Alabama',0.078345],
        ['Alaska',0.1211736],
        ['Arizona',0.0773004]
]

С событием change через jQuery я могу видеть с alert что значение раскрывающегося меню для состояний является вторым столбцом (т.е. AL, AK).

Теперь я хочу, чтобы установить text_field с идентификатором electr в зависимости от состояния выбранного. То есть, если выбрано "AL", то в качестве jQuery:
$('#electr').val(0.078345);

Как я могу это достичь?

Я новичок в Ruby on Rails и MVC, поэтому, пожалуйста, несите меня


Редактировать:

Это код выпадающих состояний:

<%= f.input :var_state_oth, label: false, wrapper: :append do %>
<%= f.input_field :var_state_oth, collection: @states, class: 'answer-single', id: 'app_var_state_oth' %>
<% end %>

И это текстовое поле, которое должно быть установлено:

<%= f.input :electr, label: false, wrapper: :append do %>
<input class="answer-single" data-autonumeric="true" data-m-dec="0" id="electr" name="app[electr]" type="text" value="<%= @app.var_energy_cons_reduction %>">

И это сегмент кода jQuery, который предложил @adeneo, с добавлением предупреждения:

$('#var_state_oth').on('change', function()  {
  alert("change detected");
    var val = $('option:selected', this).text();
    $('#electr option').prop('selected', false).filter(function() {
         return $(this).text().indexOf(val) != -1
    }).prop('selected', true);
}); 

Я даже не вижу предупреждения.

  • 0
    Ваш второй массив не соответствует значениям, которые вы используете. Используете ли вы полное название штата в тексте опции?
  • 0
    @adeneo: Да, в тексте опций я вижу Alabama , Arizona и т. д.
Показать ещё 3 комментария
Теги:
arrays

1 ответ

0

Взгляните на этот jsFiddle для одного решения: http://jsfiddle.net/H6Sqh/1/

$('#var_state_oth').on('change', function () {
   var sel = $('option:selected', $(this)).text();
    $('#electr').val(elec_rates[sel]);
});

Вам нужно будет получить переменную elec_rates заполненную данными из @electricity_table как это @electricity_table в шаблоне представления, предполагающем шаблон erb:

<script type="text/javascript">
    <%= var elec_rates = #{@electricity_table.to_json}; %>
</script>
  • 0
    Событие change не перехватывается с помощью этого кода jQuery. Я могу только установить функцию onchange для вызова. Имея это в виду, как будет код? ( this ключевое слово, о котором я говорю). Кроме того, где в файле _form.html.erb должен быть добавлен последний код?
  • 0
    Видели jsFiddle? Это то поведение, которое вы ищете? Код работает на jsFiddle, вам нужно адаптировать его для вашего кода ...
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню