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

Vue.js中v-for渲染下拉框如何获取:key值并存入变量

首先纠正一个认知::key是Vue内部做虚拟DOM对比用的标识,不会渲染到真实DOM上,不要尝试从事件对象里读取key值。你现在拿不到id的核心原因是给<option>绑定的:value只传了data.name,自然只能拿到名称,调整value绑定逻辑就能同时拿到id和名称,下面是两种可直接落地的实现方案:

方案1:绑定id为value,匹配原数组取全量数据(最推荐,无兼容问题)

这个写法完全符合原生HTML select的规范,不存在值类型转换、表单提交异常的坑,适配所有Vue版本和浏览器环境。
首先修改模板代码,修正原代码里的多余冒号笔误,把option的value绑定为data.id,@change不需要额外传$event:

<select @change="checkFirst" v-model="firstDropdownValue">
   <option value="none" selected> Select one...</option>
   <option 
      v-for="data in getCategoriesDetail" 
      :key="data.id"
      :value="data.id">
      {{data.name}}
   </option>
</select>

然后在change方法里,直接用v-model同步的选中id,去原数组匹配对应项就能拿到所有字段:

methods: {
  checkFirst() {
    if (this.firstDropdownValue === 'none') {
      // 处理默认未选择的逻辑
      return
    }
    // 匹配选中的完整数据
    const selectedData = this.getCategoriesDetail.find(item => item.id === this.firstDropdownValue)
    // 直接取值存变量即可
    const currentId = selectedData.id
    const currentName = selectedData.name
    console.log('选中id:', currentId, '选中名称:', currentName)
  }
}
方案2:绑定整个数据对象为value(写法更简洁)

Vue对select的v-model做了专门适配,支持将option的value绑定为对象类型,选中后v-model直接存储完整的数据对象,不需要手动匹配。
模板写法:

<select v-model="selectedData">
   <option :value="null" selected> Select one...</option>
   <option 
      v-for="data in getCategoriesDetail" 
      :key="data.id"
      :value="data">
      {{data.name}}
   </option>
</select>

这种写法甚至不需要额外绑定change事件,随时读取this.selectedData就能拿到完整字段:

// 直接取属性即可
if (this.selectedData) {
  const currentId = this.selectedData.id
  const currentName = this.selectedData.name
}

注意:如果你的场景需要支持原生表单提交、或者要兼容极低版本浏览器,优先选方案1;方案2是Vue层的能力实现,原生环境下无法正确读取对象类型的value。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:54:22