el-table行点击事件row-click与列按钮事件冲突
需求简述
表格用el-table实现,操作列的编辑按钮点击事件正常实现。现要为行加一点击事件,即row-click。加上后,发现点击操作列的编辑按钮时,会触发按钮本身事件,同时会触发行点击事件。第一版代码如下:
<template> <el-table :data="tableData" border @row-click="rowClick"> <el-table-column prop="date" label="日期" width="150"></el-table-column> <el-table-column prop="name" label="姓名" width="120"></el-table-column> <el-table-column prop="province" label="省份" width="120"></el-table-column> <el-table-column prop="city" label="市区" width="120"></el-table-column> <el-table-column label="操作" width="100"> <template slot-scope="scope"> <el-button @click="handleClick(scope.row)" type="text" size="small">编辑</el-button> </template> </el-table-column> </el-table> </template> <script> export default { methods: { handleClick () { console.log('我是行编辑按钮'); }, rowClick (row, column) { console.log('点击了某一行'); } }, data () { return { tableData: [ { date: '2016-05-02', name: '王小虎', province: '上海', city: '普陀区' }, { date: '2016-05-04', name: '王小二', province: '北京', city: '朝阳区' } ] }; } }; </script>
原因分析
编辑按钮的父元素是单元格,单元格父元素是行。所以编辑按钮在点击时,会产生“冒泡”。从而触发行点击事件。
解决办法
1.按钮是el-button标签,为点击事件加.native.stop ,即 @click.native.stop=“handleClick(scope.row)”
2.按钮通过render函数渲染实现,render函数中自带event事件,不用传参,不用写e,直接e.stopPropagation()就可以,当然,加上e也没毛病。
on:{ click:e=>{ e.stopPropagation(); .... }
作者:Lemoncool
更多:没有办法维护原创版权,欢迎关注我的公粽号:前端便利贴,文章更早、更全,免费获取完整代码
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.