私は jQuery にまったく慣れていないので、これは「まじかよ」かもしれません。タイプの質問ですが、次の状況があります。
dri = $('#drink_restaurant_id :selected').val()
$('#drink_restaurant_id').change ->
restaurant = $('#drink_restaurant_id :selected').text()
...
.change
アプリケーションが#drink_restaurant_id
IDフィールドの両方をチェックするかdri
、値がある/有効かどうかを確認できるようにしたいと思います。
私は次のようなことを試しました:
$('#drink_restaurant_id').change -> || if dri
if dri || $('#drink_restaurant_id').change ->
(if dri) || ($('#drink_restaurant_id').change ->)
および他のあらゆる種類の順列ですが、私のサイトでエラーメッセージが表示され続けます.
これらの両方のチェックを組み合わせて、両方のインスタンスのコードを再入力する必要がないようにする最善の方法は何ですか?
説明とコード
動的選択メニューのRailsCastに従って、これらすべてを作成しました
新しい作成ページに移動すると、プログラムは正常に動作しますが、既存のレコードを編集する場合、レストラン フィールド ( #drink_restaurant_id
) は既に選択されていますが、サイズ ( drink_size_ids
) および材料 ( drink_ingredient_ids
) フィールドはレストラン フィールドに基づいてフィルタリングされません。これを修正するには、ドロップダウンから別のレストランを選択し、元のレストランを再度選択して、サイズとレストランのフィルターを有効にする必要があります。
私が自分で見つけた回避策の 1 つは、Restaurant フィールドに値があるかどうかを確認することでした。
dri = $('#drink_restaurant_id :selected').val()
値がある場合dri
は、誰かがドロップダウンからレストランを選択してアクションをトリガーしたときと同じことをすべて行います.change
。
だから今、私のコードは次のようになります。2 つの別々のことを確認したいという理由だけで、コードが重複していることに注意してください。
jQuery ->
$('.chzn-select').chosen()
sizes = $('#drink_size_ids').html()
ingredients = $('#drink_ingredient_ids').html()
# Empty out size and ingredients dropdown
$('#drink_size_ids').html(null).trigger "liszt:updated"
$('#drink_ingredient_ids').html(null).trigger "liszt:updated"
# When 'editing', will see if restaurant is already selected
dri = $('#drink_restaurant_id :selected').val()
$('#drink_restaurant_id').change ->
restaurant = $('#drink_restaurant_id :selected').text()
size_options = $(sizes).filter("optgroup[label='#{restaurant}']").html()
ingredient_options = $(ingredients).filter("optgroup[label='#{restaurant}']").html()
if size_options
$('#drink_size_ids').html(size_options).trigger "liszt:updated"
else
$('#drink_size_ids').html($("<option>").attr('selected',true)).trigger "liszt:updated"
if ingredient_options
$('#drink_ingredient_ids').html(ingredient_options).trigger "liszt:updated"
else
$('#drink_ingredient_ids').html($("<option>").attr('selected',true)).trigger "liszt:updated"
if dri
restaurant = $('#drink_restaurant_id :selected').text()
size_options = $(sizes).filter("optgroup[label='#{restaurant}']").html()
ingredient_options = $(ingredients).filter("optgroup[label='#{restaurant}']").html()
if size_options
$('#drink_size_ids').html(size_options).trigger "liszt:updated"
else
$('#drink_size_ids').html($("<option>").attr('selected',true)).trigger "liszt:updated"
if ingredient_options
$('#drink_ingredient_ids').html(ingredient_options).trigger "liszt:updated"
else
$('#drink_ingredient_ids').html($("<option>").attr('selected',true)).trigger "liszt:updated"