Rails动态grouped_collection_select自动更改

时间:2019-06-20 21:53:53

标签: javascript jquery ruby-on-rails ruby

我有一个带有1个collection_select和2个grouped_collection_select的表单。

所有3个都以include_blank开始。当我选择第一个集合选择时,第一个grouped_collection_select(下一个选择)将自动更改。问题是第二个grouped_collection_select,下一个选择(3d选择),选项不会随之改变。仅当我重新选择第一个grouped_collection_select后,它才会更改。

表格:

<%= form_for @shop_product do |f| %>
    <%= f.collection_select :category_id, @categories, :id, :title, include_blank: "Select Category" %>
    <%= f.grouped_collection_select :style_id, @categories.order(:title), :styles, :title, :id, :title, include_blank: "Select Style", prompt: "Selet Style 2"  %>
    <%= f.grouped_collection_select :item_id, @styles.order(:title), :items, :title, :id, :title, include_blank: "Select Item"  %>
    ...

原始文件:

jQuery(function() {
  var styles;
  styles = $('#shop_product_style_id').html();
  console.log(styles);
  return $('#shop_product_category_id').change(function() {
    var category, escaped_category, options;
    category = $('#shop_product_category_id :selected').text();
    escaped_category = category.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1');
    options = $(styles).filter("optgroup[label=" + category + "]").html();
    console.log(options);
    if (options) {
      $('#shop_product_style_id').html(options);
      return $('#shop_product_style_id').parent().show();
    } else {
      return $('#shop_product_style_id').empty();
    }
  });
});

jQuery(function() {
  var items;
  items = $('#shop_product_item_id').html();
  console.log(items);
  return $('#shop_product_style_id').change(function() {
    var style, escaped_style, options;
    style = $('#shop_product_style_id :selected').text();
    escaped_style = style.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1');
    options = $(items).filter("optgroup[label=" + style + "]").html();
    console.log(options);
    if (options) {
      $('#shop_product_item_id').html(options);
      return $('#shop_product_item_id').parent().show();
    } else {
      return $('#shop_product_item_id').empty();
    }
  });
});

型号:

**shop_product.rb**

  belongs_to :category
  belongs_to :style
  belongs_to :item

**category.rb**

  has_many :shop_products
  has_many :styles

**style.rb**

  has_many :shop_products
  belongs_to :category
  has_many :items

**item.rb**

  has_many :shop_products
  belongs_to :style

例如是问题所在

  1. 我选择一个类别
  2. 出现样式,在选择字段中说“帽衫”
  3. 项目不变。

要更改Item,我需要选择:style_id字段,选择“ hoodies”以外的其他内容,然后重新选择“ hoodies”,然后将出现具有Item.style_id == "hoodies"

的Item。

我希望item_id的第三个选择在选择@category的同时更改style_id。另外,如果将@categories collection_select放回“选择类别”,则要全部重置它们。

我怎么拥有它,以便所有东西都统一在一起?当style_id更改时,:item_id grouped_collection_select字段如何更改,因此我无需重新选择即可更改它?

1 个答案:

答案 0 :(得分:0)

您可以使用trigger功能

  ...
  else {
    return $('#shop_product_style_id').empty();
  }
  $('#shop_product_style_id').trigger('change')
});

这将称为$('#shop_product_style_id').change(function...