【问题标题】:Rails Cascading Drop Down List: Change Drop down menu into Text Field based on Previous Drop Down Option SelectedRails 级联下拉列表:根据先前选择的下拉选项将下拉菜单更改为文本字段
【发布时间】:2016-01-13 06:30:05
【问题描述】:

在我的 Rails 应用程序中,我有一个使用 country_select gem 的国家/地区选择选项下拉列表,在国家/地区选择下拉列表旁边有另一个下拉列表显示“美国”中的州,如代码如下:

国家代码选择下拉

<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

这里默认选择的国家是“美国”,但是如果用户从国家选择下拉列表中选择任何其他国家,那么我想让状态选择下拉到一个普通的文本字段而不是下拉列表。 如果用户选择美国以外的国家/地区,如何使状态选择下拉到文本字段中?如果所选国家/地区是美国,则州部分必须保留为下拉菜单?

【问题讨论】:

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


    【解决方案1】:

    我建议最初添加文本字段和状态下拉菜单,然后根据国家/地区值切换它们。

    <%= 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 选择器。

    【讨论】:

    • @Qaiser Nadeem:我需要在哪里添加 jquery?
    • 您可以在渲染表单的同一视图中添加上述脚本。默认情况下 jquery 在 application.js 中添加,如果没有,则在 app/assets/javascripts/application.js 中添加 //= require jquery
    • 我按照你说的做了,但是在更改国家/地区的下拉值时没有执行该功能。
    • 您在浏览器控制台中是否遇到任何错误?其次,您是否将上述虚拟 ID 替换为您的实际 ID?
    • 谢谢老兄,有了小小的改动,你的解决方案现在对我有用了:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    相关资源
    最近更新 更多