基于表单输入选择功能吗?

时间:2019-04-02 02:38:42

标签: javascript jquery

问题:我的表单通过/发布了最后一个可用选项,而不是所选择的选项。

我有一个可以根据以下选择动态隐藏或显示的表单:

<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”中可用的第一个选择,即使它被隐藏了。经历的原因是它是表单上可用的最后一个选择。

0 个答案:

没有答案