Blocked aria-hidden on an element because its descendant retained focus.

当组件进行交互时,比如切换轮播图,切换按钮组等控制台发生以下报错:

在这里插入图片描述

这个原因是【aria-hidden】属性问题,报错信息中有告诉了我们是哪个标签中存在这个属性(该图片已知有个类名【n-carousel__slide】),那我们就想办法找到这个标签(这个标签会有多个),然后去除该属性。

解决方法一:若在 Vue 项目中使用组件,可以使用 ref 属性查找,这里以 Vue3 和 Navie-UI 为例:

<!-- 这里使用 Navie-UI 轮播图组件为例 -->
<template>
	<n-carousel
	    effect="card"
	    prev-slide-style="transform: translateX(-150%) translateZ(-800px);"
	    next-slide-style="transform: translateX(50%) translateZ(-800px);"
	    style="height: 240px"
	    :show-dots="false"
	    @update:current-index="changeCarousel"
	  >
	    <n-carousel-item :style="{ width: '60%' }" v-for="(item,index) in 3" :key="index" ref="carouselRef">
	      <img
	        class="carousel-img"
	        src="https://naive-ui.oss-cn-beijing.aliyuncs.com/carousel-img/carousel1.jpeg"
	      >
	    </n-carousel-item>
	</n-carousel>
</template>
<script lang="ts" setup>
	import { onMounted, ref } from 'vue';
	const carouselRef = ref(null)
	// 组件刚加载时就进行去除
	onMounted(() => {
	    // 防止轮播图交互时控制台报错
	    carouselRef.value.forEach((item:any) => {
	    	// 先打印 item 是否为控制台报错的标签
	    	console.log(item); // 打印发现 item 对象有个 selfElRef 字段才是我们需要的标签
	    	// 再打印 item.selfElRef 是否存在【aria-hidden】属性,若存在移除该属性
	    	console.log(item.selfElRef);
	        item.selfElRef.removeAttribute('aria-hidden')
	    })
	})
	// 轮播图交互时发现每次切换该组件都会自动加入【aria-hidden】属性,所以每次切换都需要调用
	function changeCarousel(){
	    // 防止轮播图交互时控制台报错
	    carouselRef.value.forEach((item:any) => {
	        item.selfElRef.removeAttribute('aria-hidden')
	    })
	}
</script>

控制台打印 item 信息如下:
在这里插入图片描述

控制台打印 item.selfElRef 信息如下:
在这里插入图片描述

这里就不再演示其他情况了,若使用 Vue2 和 Element-UI ,大概讲一下步骤:
1、给 Elementu-UI 组件报错的标签定义一个 ref=“xxRef”;
2、找到【控制台报错的标签信息】(可以通过打印 console.log(this.$refs.xxRef) 找里面的属性是否【存在控制台报错的标签】)
3、循环【报错标签数组】并打印每个对象,看是否与控制台报错标签一致,若一致去除【aria-hidden】属性;
4、在 【mounted() 方法】和【组件自带的切换事件】都需要进行循环去除【aria-hidden】属性。

解决方法二:使用 document.getElementsByClassName(‘n-carousel__slide’) 找到该标签

// 也可以使用 querySelectorAll('.n-carousel__slide')找到该标签
// const slides = document.querySelectorAll('.n-carousel__slide')
const slides = document.getElementsByClassName('n-carousel__slide')
for (const slide of slides) {
	// 先打印每个标签看是否存在【aria-hidden】属性,若存在移除该属性
	console.log(slide);
	// 执行下行后控制台标签不再有【aria-hidden】
    slide.removeAttribute('aria-hidden')
}

同样,以上代码也要放在【组件刚加载时】和【组件调用更新(切换)事件】的时候。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值