问题:我的表单通过/发布了最后一个可用选项,而不是所选择的选项。
我有一个可以根据以下选择动态隐藏或显示的表单:
<select id="country" class="form-control form-group">
<option value="nil">-- select one -- </option>
<option value="US">United States</option>
<option value="AU">Australia</option>
<option value="AT">Austria</option>
<option value="BE">Belgium</option>
<option value="CH">Switzerland</option>
...
现在,基于该选择出现的内容如下以及我的问题所在:
<div class="form-group">
<%= f.label :address_state, "State/Province/Region" %>
<div id="us-states">
<%= f.select(:address_state, options_for_select((us_states), @stripe_account[:address_state]), {}, { class: "form-control input-lg"}) %>
</div>
<div id="au-regions" style="display:none;" <%= 'hidden' unless @stripe_account.country == "US" %> >
<%= f.select(:address_state, options_for_select((au_regions), @stripe_account[:address_state]), {}, { class: "form-control input-lg", id: "address_state au_regions"}) %>
</div>
<div id="at-states" style="display:none;">
<%= f.select(:address_state, options_for_select((at_states), @stripe_account[:address_state]), {}, { class: "form-control input-lg", id: "address_state at_states"}) %>
</div>
...
Javascript:
<script>
$("#country").on("change",function(){"US"===$(this).val()?$("#us-states").show():$("#us-states").hide()});
$("#country").on("change",function(){"AU"===$(this).val()?$("#au-regions").show():$("#au-regions").hide()});
$("#country").on("change",function(){"AT"===$(this).val()?$("#at-states").show():$("#at-states").hide()});
$("#country").on("change",function(){"BE"===$(this).val()?$("#be-provinces").show():$("#be-provinces").hide()});
$("#country").on("change",function(){"CH"===$(this).val()?$("#ch-regions").show():$("#ch-regions").hide()});
...
</script>
问题是,它传递了`:address_state“中可用的最后一个参数。因此,如果我选择['california','ca'],它将通过['england','eng'],例如...如果ENG是订单中的最后一个,即使它没有显示。
我认为,解决此问题的唯一方法是使用函数?过去我做过类似的事情,但是我不确定如何显示/隐藏或仅允许基于函数传递参数?
如何根据:country
的选择创建函数?
还是有更好的替代方法来实现这一目标?
问题示例:
我选择美国,然后出现美国州选择,我选择“ CA”,但是经过的是“ at_states”中可用的第一个选择,即使它被隐藏了。经历的原因是它是表单上可用的最后一个选择。