0

動的選択メニューを含む子フィールドを持つRailsネストフォームがあります:-category(フィルターメニュー)--products

単一のフィールドセットを機能させることはできますが、.html()を取得して選択データをロードすることができなかったため、製品メニューをハックしました(DOM対応のメインフォームで「バックアップ」collection_selectを使用)。動的フィールド。テンプレートコードとして、改訂されたRailscast#88を使用しています。

本当の問題は、最初の選択メニューの組み合わせだけが機能することです。追加のフィールドセットでカテゴリメニューを選択すると、すべてのメニューが失敗します。(this)メソッドを追加しようとしましたが、機能させることができました。

どんな洞察も大歓迎です!

Relevent js.coffee:

products = $('.products-backup').html()
$('form').on 'change', '.category', (event) ->
category = $('.category :selected').text()
escaped_category = category.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1')
options = $(products).filter("optgroup[label='#{escaped_category}']").html()
if options
    $('.products').html(options)
else
    $('.products').empty()

Relevent rails html.erbpartial-注:各選択メニューに:class名を割り当てました:

<fieldset>
<div class="field">
<%= f.collection_select :category_id, Category.all, :id, :name, { prompt: 'Select' }, 
{ :class => "category" } %> 
</div>
<div class="field">
<%= f.grouped_collection_select :product_id, Category.order(:name), :products, 
:name, :id, :name, { prompt: 'Select' }, { :class => "products" } %>
</div>
#...more fields
</fieldset>
4

1 に答える 1

0

@ジェフ、あなたは私のようなものが欲しいです:

var $products_backup = $('#products_backup');
$('form').on('click', '.category', function() {
    var $category = $(this);
    if (!$category.is(":checked")) {
        return;
    }
    var escaped_category = $category.val().replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1');
    var $options = $products_backup.find("optgroup[label='" + escaped_category + "']").find("option");
    //$('#products').empty().append('<option value="">Select an item</option>').append($options.clone()).val("");
    $category.closest('fieldset').find('.products').empty().append('<option value="">Select an item</option>').append($options.clone()).val("");
});

見る :

ご覧のとおり、.category要素はラジオボタンである可能性があります。そうでない場合は、コードを多かれ少なかれ調整する必要があります。

于 2012-05-12T17:06:55.743 に答える