【问题标题】:Angular form dropdown 1 used to select option in dropdown 2Angular 表单下拉菜单 1 用于在下拉菜单 2 中选择选项
【发布时间】:2018-05-26 14:45:22
【问题描述】:

我有两个 Angular 形式的下拉菜单。一个是国家,另一个是国家拨号代码。当用户在第一个下拉列表中选择 USA 时,我想将第二个下拉列表更新为默认为 +1 作为拨号代码。否则,第二个下拉菜单应默认为占位符“选择国家代码”。我已经使用 javascript 成功完成了这项工作,但是 Angular 在提交时仍然认为表单无效。我尝试强制该字段在 javascript 中有效,但它似乎不起作用。有没有办法在 HTML 中使用 javascript 或 ng 命令来做到这一点?我想保持 html 的格式不变(即使用 select 和 options 标签)。

HTML:

<select required
class="form-control vertical-gap-5--bottom color-gray--warm-8"
id="country" name="country" type="text"
ng-model="contactSession.country">
<option data-countryCode="UG" value="256">Uganda</option>
<option data-countryCode="UA" value="380">Ukraine</option>
<option data-countryCode="AE" value="971">United Arab Emirates</option>
<option data-countryCode="GB" value="44">United Kingdom</option>
<option data-countryCode="US" value="1">United States</option>
<option data-countryCode="UY" value="598">Uruguay</option>
<option data-countryCode="UZ" value="998">Uzbekistan</option>
</select>

<select required
class="form-control vertical-gap-5--bottom color-gray--warm-8"
id="countryCode" name="countryCode" type="text"
ng-init="contactSession.countryCode = '1'"
ng-model="contactSession.countryCode">
<option value="" selected="selected">Select Country Code</option>
<option data-countryCode="UA" value="380">Ukraine (+380)</option>
<option data-countryCode="AE" value="971">United Arab Emirates(+971)</option>
<option data-countryCode="GB" value="44">United Kingdom (+44)</option>
<option data-countryCode="US" id="usaSelection" value="1">United States (+1)</option>
<option data-countryCode="UY" value="598">Uruguay (+598)</option>
</select>

JS:

    $('select[name=country]').change(function () {
    if ($(this).val() == '1') {
        document.getElementById("countryCode").value = document.getElementById("usaSelection").value;
    } else {
        document.getElementById("countryCode").value = "";
    }
});

【问题讨论】:

  • 参考这个answer
  • 我不明白这是如何回答这个问题的。
  • 你看演示了吗?
  • 演示展示了一个全新的下拉菜单,它使用新值呈现。我想保留相同的下拉列表,只需在第一个下拉列表选择为 USA 时自动选择该下拉列表中的值。当我使用上面显示的 javascript 执行此操作时,表单变得无效。
  • 为什么要维护HTML?我想建议的是在select 中使用'ng-options'。你对“Angularjs”了解够了吗?

标签: angularjs forms validation dropdown


【解决方案1】:

我做了一个小提琴,但我不确定这是否与您的意图相同。

Change select box

<select ng-options="country.code as country.nameAndCode for country in countries"
        ng-model="selectedCountryAndCode"
        ng-change="changeCountryAndCode();"
        required>
    <option value="">Select Country Code</option>
</select>

如果你使用'ng-options',它会让代码更简单。

.

.

更新

Here's updated fiddle.

据我了解,以下稍作修改。

.

.

.

最新更新

Here's another updated fiddle

【讨论】:

  • 我觉得这似乎很接近,但是国家代码应该保留在“选择国家代码”选项上,并且只有在用户选择美国时才会更改。发生这种情况后,用户应该能够在不影响国家的情况下更改国家代码。只有当用户为了方便而选择美国时,它才应该默认为 +1。
  • 似乎 ng-options 将每个值绑定在一起,但是用户应该能够住在美国,但选择美国以外的国家代码。
  • @display___ 啊,我想我已经有点理解你的意图了。所以你的意思是当用户选择一个国家时,国家代码是由所选国家给出的。但是如果用户选择一个国家代码,国家代码会改变,但国家仍然和用户选择的一样,对吧?
  • 我已经创建了表单所需的确切行为的小提琴,我已经实现了。选择美国时,国家代码会更改,但用户可以更改国家代码,国家将保留在美国。问题是,当使用 jQuery 更新字段值时,表单不会变为有效。用户必须手动进行选择以使该字段有效。实用选择时如何验证国家代码字段? jsfiddle.net/___display/vv9dsajm/3
  • @display___ 为什么要使用“JQuery”进行验证?将“AngularJS”和“JQuery”一起使用是一种不好的方式。在“AngularJS”中有很多使用“form”的好方法。如果您同意我的建议,我会尝试制作另一个与您的更相似的小提琴。
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2018-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多