2009-09-16 1 views
1

В форме, которую мы создали, у нас есть поле «Штаты», которое позволяет пользователям выбирать несколько состояний за раз. Существует поле «Город», которое должно быть заполнено в соответствии с выбором в поле «Состояние». Значения в поле «Город» правильно заполняются, если выбрано только одно состояние. Тем не менее, он не отображается правильно, когда выбрано несколько состояний.Как заполнить поле на основе выбора в предыдущем поле?

Пожалуйста, предложите решение Ruby для него.

+0

Пожалуйста, введите код, который у вас есть. – mikej

+0

Ниже приведен код для американского государства: <% = select_tag 'usa [states] []', options_from_collection_for_select (state,: state,: state, nil),: multiple => true,: class => "multi_select "%> Я использую поле наблюдения (AJAX), чтобы наблюдать, какое состояние выбрано <% = наблюдать_field: usa_states_,: url => {: controller =>" logins ",: action => 'deliverable_cities',: id => '1'},: update => 'deliverable_city',: with => "'state =' + document.getElementById ('usa_states _'). Value + '& type = restaurant'",: on => 'click'% > , в котором выбрано состояние, все города этого штата будут отображаться в списке выбора города – Aditya

+0

Это нормально работает, когда я выбираю только одно состояние. Но когда я выбираю более одного состояния, я получаю только одно значение через ajax, поэтому получаю только Города этого единственного состояния. – Aditya

ответ

1

Проблема заключается в выражении :with в вашем observe_field. document.getElementById('usa_states_').value будет возвращать только одно значение, а не все выбранные значения.

Я не уверен, есть ли способ обработать это автоматически в Rails, но одно решение - написать функцию JavaScript, которая построит строку из всех выбранных значений, разделенных запятыми. например

function selectedValuesAsString(multiselect) { 
    selectedValues = new Array(); 
    for (i = 0; i < multiselect.length; i++) { 
     if (multiselect[i].selected) { 
      selectedValues.push(multiselect[i].value); 
     } 
    } 
    return selectedValues.join(); 
} 

, а затем обновить :with быть что-то вроде:

:with => "'state='+selectedValuesAsString(document.getElementById('usa_states_')" 

, а затем, наконец, разделить значения внутри контроллера действий.

+0

Thanx чувак это работает. Бесконечно благодарен. – Aditya