elementui中el-button点击后强制失去焦点(this.$confirm取消后按钮聚焦问题)

初次接触前端,初次使用vue,初次使用elementui,难免遇到坑。
使用el-button的时候,发现点击按钮后,按钮颜色仍然保持鼠标悬浮上去时候的效果,并没有恢复到正常状态。如图示:
在这里插入图片描述
图1-正常状态下的按钮
在这里插入图片描述
图2-鼠标悬浮或点击后的按钮

我们所期望的是,在按钮点击后,恢复到正常状态(即图1)。
因为是前端新手,对很多东西不熟悉,所以就一脸懵逼的去百度,大多数说的都是类似“Element UI点击按钮后不失焦,强制失焦”即可,查看相应的css代码,基本确认就是由于点击后按钮不失去焦点导致的。搜索到的解决方案基本如下:evt.target.blur()。只能说天下文章一大抄啊!!!搜到的几篇帖子,都只是使用evt.target.blur()强制失去焦点即可,然而这并没有全面解决问题。 因为如果点击按钮的空白处,点击完毕后,的确可以恢复到点击前的状态的,但是如果点击“退出”两个字,在点击完成后,按钮状态还是没有恢复到点击之前的样子。

解决方法:

 clickHandler(evt) { // 按钮点击事件的回调函数
        let target = evt.target;
        if(target.nodeName == "SPAN"){
            target = evt.target.parentNode;
        }
        target.blur();
}

上面是解决方法。

原因:

下图为el-button的结构:
在这里插入图片描述
el-button结构图

点击button的时候,如果点击到文字(即span)上,这个时候evt.target是span标签,这个时候是没法直接触发其父节点button的blur方法的,也就没法强制button失去焦点。所以需要判断点击的是span还是button。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要给element-ui的this.$confirm添加按钮加载效果,需要使用Vue.js的混合 mixin技术。Mixin是一种在其他组件之间共享代码的方式,它可以在多个组件之间重用某些逻辑并且使得逻辑的代码可以集在一个地方维护。 我们可以定义一个mixin,然后在需要添加按钮加载效果的组件导入该mixin,即可使用其定义的方法和属性。 首先,我们定义mixin,名为loadingButton: ```javascript export const loadingButton = { data() { return { buttonLoading: false, } }, methods: { showLoading() { this.buttonLoading = true; }, hideLoading() { this.buttonLoading = false; } } } ``` 这个Mixin包含了一个数据属性buttonLoading和两个方法showLoading和 hideLoading。showLoading用于显示加载效果,hideLoading用于隐藏加载效果。 接着,在使用this.$confirm创建的对话框通过mixin导入loadingButton: ```javascript import {loadingButton} from '@/mixins/loadingButton'; this.$confirm('确认删除?') .then(() => { this.$message({ type: 'success', message: '删除成功!' }); }) .catch(() => { this.$message({ type: 'info', message: '已取消删除' }); }) .finally(() => { this.hideLoading(); // 隐藏加载效果 }); ``` 最后,我们可以在按钮点击事件调用showLoading方法,显示加载效果: ```javascript methods: { handleDeleteClick() { this.showLoading(); // 显示加载效果 this.$confirm('是否删除选内容?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }) .then(() => { // 调用删除逻辑 }) .catch(() => { // 用户取消删除 }); } } ``` 这样,在点击删除按钮时会先显示加载效果,然后再弹出对话框。当对话框关闭时,无论成功与否,都会调用finally方法,隐藏加载效果。 总之,通过使用Mixin,我们可以在多个需要添加按钮加载效果的组件共享代码,大大提高了代码复用性和维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值