You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

填写表单其他输入框时城市选择器意外重置问题求助

问题分析与解决方案

核心问题:城市选项的value绑定错误

你城市选择器的v-for循环中,:value错误绑定成了form.cityID,这会导致所有城市选项的value值都和当前选中的城市ID一致。当你修改其他输入框触发组件重渲染时,Vue会重新生成这些选项,此时所有选项的value都等于当前form.cityID,但由于选项的实际值逻辑错误,浏览器无法匹配到正确的选项,最终导致城市选择器被重置。

修正代码

把城市选项的:value改为city.id:

<select 
    type="text" 
    class="questionnaire__questions-input questionnaire__input"
    v-model="form.cityID"
    :class="$v.form.cityID.$error ? 'questionnaire-input-invalid' : ''">
    <option value="">Выберите город</option>
    
    <option v-for="city in cities" :key="city.id" :value="city.id">{{city.name}}</option>
    
</select>

额外优化建议

  1. 避免空值报错:你的Watcher中直接取filter结果的[0],如果COUNTRIES还未加载完成,或者找不到对应国家,会导致undefined.cities报错。可以添加空值判断:
'form.countryID': function(newVal){
    if (!newVal || !this.COUNTRIES.length) {
        this.cities = [];
        this.form.cityID = ''; // 同时重置城市选择
        return;
    }
    const country = this.COUNTRIES.find(item => item.id == newVal);
    this.cities = country?.cities || [];
    this.form.cityID = ''; // 切换国家时重置城市选择,提升用户体验
}
  1. 用find替代filter:filter会返回所有匹配项,而你只需要第一个匹配的国家对象,用find更高效。

内容的提问来源于stack exchange,提问作者Almat Kaipzhanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 10:35:16