关于el-button 无法多选的解决办法
2021-12-17 本文已影响0人
最慢的是活着
截屏2021-12-17 上午11.10.54.png
截屏2021-12-17 上午11.27.12.png
<el-button plain @click="addPersionLayer" style=" margin: 20px;">朴素按钮</el-button>
<el-button plain @click="addCarLayer" style=" margin: 20px;">朴素按钮2</el-button>
如上写法按钮无法多选,可通过动态添加class来解决
<el-button plain @click="addPersionLayer" :class="active?'aaa':'bbb'" style=" margin: 20px;">朴素按钮</el-button>
<el-button plain @click="addCarLayer" :class="active2?'aaa':'bbb'" style=" margin: 20px;">朴素按钮2</el-button>
css
.aaa{
color:#1890FF;
border: 1px solid #1890FF;
}
.bbb{
color:#606266;;
border: 1px solid #DCDFE6;
}
js
addPersionLayer(e)
{
this.active = !this.active;
},
addCarLayer(e)
{
this.active2 = !this.active2;
}
写到这里会遇到,点击取消时按钮焦点无法取消,如果按钮有按键监听行为,那么当按钮在聚焦状态下也会触发,比如点击button打开模态窗时调用了一个方法openDialog,如果按钮未失去焦点,那么通过按键可能会再次触发该方法,所以需要手动移除聚焦效果
addPersionLayer(e)
{
this.active = !this.active;
let target = e.target;
// 根据button组件内容 里面包括一个span标签,如果设置icon,则还包括一个i标签,其他情况请自行观察。
// 所以,在我们点击到button组件上的文字也就是span标签上时,直接执行e.target.blur()不会生效,所以要加一层判断。
if(target.nodeName == 'SPAN' || target.nodeName == 'I')
{
target = e.target.parentNode;
}
target.blur();
},
addCarLayer(e)
{
this.active2 = !this.active2;
if(target.nodeName == 'SPAN' || target.nodeName == 'I')
{
target = e.target.parentNode;
}
target.blur();
}
同理,如果需要修改选中后蓝底状态,用上面css写样式也可以,或者通过active去判断是否更改他的type
<el-button @click="addPersionLayer" style=" margin: 20px;" :type="active?'primary':''">朴素按钮</el-button>
<el-button @click="addCarLayer" style=" margin: 20px;" :type="active2?'primary':''">朴素按钮2</el-button>
这样就可以得到如图的多选按钮
截屏2021-12-17 上午11.27.12.png