我对 jQuery 很陌生,所以这可能是“说真的,伙计?” 类型的问题,但我有以下情况:
dri = $('#drink_restaurant_id :selected').val()
$('#drink_restaurant_id').change ->
restaurant = $('#drink_restaurant_id :selected').text()
...
我想拥有它,以便应用程序检查ID 字段.change
上的a#drink_restaurant_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
) 字段未根据餐厅字段进行过滤。要解决此问题,我必须从下拉列表中选择另一家餐厅,然后重新选择原始餐厅以启用大小和餐厅的过滤器。
我自己发现的一种解决方法是通过执行以下操作来检查 Restaurant 字段是否具有值:
dri = $('#drink_restaurant_id :selected').val()
如果dri
有值,则执行与某人从下拉菜单中选择餐厅并触发操作时相同的所有.change
操作。
所以现在,我的代码看起来像这样。注意代码的重复只是因为我想检查两个不同的东西。
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"