如何修改jQuery脚本适配Mobile Safari的:focus-visible焦点兼容方案?
适配Mobile Safari的:focus-visible修改方案
直接修改原脚本如下,核心是通过:focus-visible判断焦点触发场景,替代原focusin事件的无差别触发:
$(".axxs-accordion .a-section.collapsed").on("focus", function () { // 仅在键盘/辅助技术触发焦点时执行操作 if ($(this).is(':focus-visible')) { $(this).removeClass("collapsed").addClass("expanded"); // 移除inert属性,jQuery的removeAttr只需传属性名 $(this).find('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]').removeAttr("inert"); } });
修改说明:
- 替换
focusin为focus事件:focusin是冒泡事件,会在元素或其子元素获得焦点时都触发,而:focus-visible仅作用于当前直接获得焦点的元素,用focus事件更匹配场景。 - 增加
:focus-visible判断:Mobile Safari对触摸触发的焦点行为特殊,:focus-visible能精准区分「键盘/辅助技术触发的焦点」和「触摸点击的焦点」,避免触摸时误触发展开逻辑。 - 修正
removeAttr写法:原代码中removeAttr("inert", "")是错误写法,jQuery的removeAttr只需传入属性名即可移除对应属性。
内容的提问来源于stack exchange,提问作者DeanH
相关产品推荐
相关产品推荐

