我需要在 Rails 3.2 中创建一个动态选择字段,其中第二个字段(州)中可用的选项取决于第一个(国家)的值。我参考了这个 Railscast 的修订版,并且正在使用以下代码:
jQuery ->
$('#person_state_id').parent().hide()
states = $('#person_state_id').html()
$('#person_country_id').change ->
country = $('#person_country_id :selected').text()
escaped_country = country.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1')
options = $(states).filter("optgroup[label='#{escaped_country}']").html()
if options
$('#person_state_id').html(options)
$('#person_state_id').parent().show()
else
$('#person_state_id').empty()
$('#person_state_id').parent().hide()
我需要对这段代码进行两处更改,我认为对于那些拥有比我更强的 javascript 技能的人来说,这应该是非常简单的。
- 在过滤列表中,我需要包含一个空白选项。当前选择国家会导致选择文件列表中的第一个州。我需要离开提示“请选择”。我怎样才能做到这一点?
编辑
SMathew 的建议在这里有所帮助。我正在使用$('#person_state_id').html(options).prepend('<option></option>')
which 与 html 标记上的提示属性一起获得所需的结果。
如果没有选择国家(即
else
声明)person_state_id
,则应包含所有州的完整、未经过滤的列表。我试过了:else $('#person_state_id').html(states)
但这并不像预期的那样表现。我有这些问题。
如果我选择一个具有相关州记录的国家/地区,则 #person_state_id 选项会被正确过滤(并且使用 smathews 建议,会包含一个提示)。
如果我选择一个没有关联州记录的国家/地区,#person_state_id 包含所有州,标记中的一个空白选项,但默认选择第一个州选项。(它应该是空的,默认选择一个空白选项并显示一个提示)。
如果我清除#person_country_id 中的选择,#person_state_id 包含所有状态的未过滤列表(正确)和标记中的空选项(正确),但默认选择第一个状态记录(应该是提示)。
我该如何解决这些问题?
谢谢