使用Vanilla JS开发SPA时,<a>标签内图片点击失效问题求助
问题解决:点击标签内图片无法触发SPA路由跳转
问题根源
点击<a>标签内部的图片时,event.target指向的是<img>元素(而非<a>标签),而<img>没有href属性,导致event.target.href为undefined,路由跳转逻辑失效。
解决方案
方案1:使用event.currentTarget获取绑定事件的标签
修改route函数,将event.target替换为event.currentTarget——currentTarget始终指向绑定了点击事件的元素(也就是<a>标签),不受内部子元素影响:
const route = (event) => { event = event || window.event; event.preventDefault(); window.history.pushState({}, "", event.currentTarget.href); handleLocation(); };
方案2:通过closest()找到父级标签
如果需要兼容更复杂的嵌套结构,可以用closest('a')从点击的元素向上查找最近的<a>标签:
const route = (event) => { event = event || window.event; event.preventDefault(); const linkElement = event.target.closest('a'); if (linkElement) { window.history.pushState({}, "", linkElement.href); handleLocation(); } };
方案3:CSS事件穿透
给<a>标签内部的所有子元素添加pointer-events: none,让点击事件直接穿透到父级<a>标签:
.mainServices-section > * { pointer-events: none; }
注意:如果内部子元素需要绑定自己的点击事件,这个方案不适用。
内容的提问来源于stack exchange,提问作者Mauricio Laratro
相关产品推荐
相关产品推荐

