Rails级联下拉列表:根据选择的上一个下拉选项将下拉菜单更改为文本字段

时间:2016-01-13 06:30:06

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.2

在我的Rails应用程序中,我有一个使用 country_select gem的国家选择选项下拉列表,在国家/地区选择下拉列表旁边有另一个下拉列表以显示" US& #34;比如下面的代码:

国家/地区选择代码下降

<div class="row">
    <div class="form-group">
      <%= f.label :country,'Country', class:"control-label"%>
      <%= f.country_select(:country ,  {priority_countries: [ "US"]} ,{class: "form-control"}) %>
    </div>
</div>

状态选择代码下降

      <%= f.label :state,'State', class:"control-label" , style: "color: black;"%>
      <%= f.select( :state, options_for_select(us_states), {}, {class: "form-control"}) %>

此处 us_states方法在application_helper.rb文件中定义,如下:

def us_states
    [
        ['Alabama', 'AL'],
        ['Alaska', 'AK'],
        ['Arizona', 'AZ'],
     ...............etc
    ]

  end

此处默认选择的国家/地区为&#34; US&#34;,但如果用户从国家/地区选择下拉列表中选择任何其他国家/地区,则我希望将状态选择下拉到普通文本字段而不是下拉列表。 如果用户选择美国以外的国家/地区,如何将状态选择下拉到文本字段?如果选定的国家/地区是美国,州政府部门必须保持下拉状态?

1 个答案:

答案 0 :(得分:4)

我建议最初添加文本字段和状态下拉列表,并根据国家/地区值进行切换。

<%= f.label :state,'State', class:"control-label" , style: "color: black;"%>
<%= f.select( :state, options_for_select(us_states), {}, {class: "form-control"}) %>
<%= f.text_field :state,'', class: "form-control",:style=>"display:none"%>

现在在jquery中添加切换逻辑

<script type='text/javascript'>
    $("#country_drop_down_id").change(function(){
    if($(this).val()=='US'){
       $('#state_drop_down_id').show();
       $('#state_text_field_id').hide();
    }else{
       $('#state_drop_down_id').hide();
       $('#state_text_field_id').show();
    }
    });
 </script>

替换 country_drop_down_id , state_drop_down_id , state_text_field_id 使用相应的ID选择器。