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

Vue中如何获取v-for生成的文本输入框的输入值?

解决v-for生成输入框的取值问题

当然不用放弃通用方案,完全可以实现动态表单的取值需求,下面给你两种常用的实现方式:

方法一:使用对象存储表单值

这种方式适合每个表单项有唯一标识(比如字段名)的场景,把表单值统一存在一个对象里,通过v-model绑定对象的对应属性。

修改后的代码示例:

<template>
  <div class="form-group" v-for="item in formItems" :key="item.field">
    <label :for="item.field">{{item.label}}</label>
    <input 
      type="text" 
      class="form-control"  
      :id="item.field"
      v-model="formData[item.field]"
    >
  </div>
</template>

<script>
export default {
  data() {
    return {
      // 假设formItems每个项包含label(显示文本)和field(唯一字段名)
      formItems: [
        { label: '用户名', field: 'username' },
        { label: '邮箱', field: 'email' },
        { label: '手机号', field: 'phone' }
      ],
      // 存储表单值的对象
      formData: {}
    }
  },
  methods: {
    submitForm() {
      // 提交时直接使用this.formData,里面就是所有输入框的值
      console.log(this.formData)
    }
  }
}
</script>

方法二:使用数组存储表单值

如果你的formItems没有唯一字段名,也可以用数组按索引来绑定,数组的索引和v-for的索引对应。

修改后的代码示例:

<template>
  <div class="form-group" v-for="(item, index) in formItems" :key="index">
    <label :for="`input-${index}`">{{item.label}}</label>
    <input 
      type="text" 
      class="form-control"  
      :id="`input-${index}`"
      v-model="formData[index]"
    >
  </div>
</template>

<script>
export default {
  data() {
    return {
      formItems: [
        { label: '用户名' },
        { label: '邮箱' },
        { label: '手机号' }
      ],
      // 初始化数组,长度和formItems一致,默认值为空字符串
      formData: Array(this.formItems.length).fill('')
    }
  },
  methods: {
    submitForm() {
      // formData数组里按顺序存储了每个输入框的值
      console.log(this.formData)
    }
  }
}
</script>

另外注意:原代码里所有输入框的id都是同一个值,这会导致标签和输入框的关联失效,建议改成动态id(比如上面示例里的:id="item.field"或:id="input-${index}"),同时label的for属性也要对应绑定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:25:20