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

Vue.js中如何在<input>的onclick属性传递v-for循环变量参数

解决Vue.js待办事项列表删除按钮传参问题

嘿,这个问题我熟!你遇到的是Vue事件绑定和原生DOM事件的作用域差异问题,别急,我给你讲清楚怎么解决~

首先得划重点:别用原生的onclick啦! 原生onclick的作用域和Vue模板的响应式变量作用域不兼容,根本拿不到v-for循环里的item.id,得用Vue自己的事件绑定语法才行。

正确写法一:直接传递item.id给remove方法

先改模板部分,把onclick换成Vue的@click(这是v-on:click的简写),然后直接把item.id作为参数传进去:

<template>
  <div>
    <h3>待办事项</h3>
    <ul>
      <!-- v-for循环要加上:key,这是Vue的规范要求哦 -->
      <li v-for="item in todoList" :key="item.id">
        {{ item.content }}
        <!-- 用@click绑定事件,直接传递item.id -->
        <button @click="remove(item.id)">删除</button>
      </li>
    </ul>
  </div>
</template>

然后你的JavaScript方法部分保持接收id参数的逻辑就行,比如:

<script>
export default {
  data() {
    return {
      todoList: [
        { id: 1, content: '熟悉Vue基础语法' },
        { id: 2, content: '实现待办事项列表' },
        { id: 3, content: '搞定删除按钮传参' }
      ]
    }
  },
  methods: {
    remove(id) {
      // 通过过滤数组删除对应id的项,更新列表
      this.todoList = this.todoList.filter(item => item.id !== id)
    }
  }
}
</script>

正确写法二:直接传递整个item对象

如果你觉得直接传对象更灵活,也可以这么写:

模板里改成:

<button @click="remove(item)">删除</button>

然后方法里改成接收item对象,再取id进行删除:

methods: {
  remove(item) {
    this.todoList = this.todoList.filter(todo => todo.id !== item.id)
  }
}

为什么原生onclick不行?

简单说,原生onclick的回调函数是在全局window作用域下运行的,它访问不到Vue模板里v-for循环的item变量——这个item是Vue模板的局部响应式变量,只有Vue的事件绑定(@click)才能正确拿到这个作用域里的变量。

这样改完之后,点击删除按钮就能正确触发remove方法并删除对应项啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:26:54