有一个嵌套了 svg 的按钮:
<template v-for="row in objekts" :key="row.id">
<tr class="table__objem-row">
<td v-for="(td, i) in tableStructureVisible" :key="i">
{{ row[td.field] }}
<button class="btn-arrowed" @click="hideAllDetails">
<svg width="24" height="24" role="img" aria-hidden="true">
<path d="M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z"></path>
</svg>
</button>
</td>
</tr>
</template>
一个事件到达函数,其目标不是按钮,而是嵌套在其中的 svg。我需要按钮的参考。通过路径解决问题:
hideAllDetails(e) {
// удаляем window и document из массива, они не работают с contains
const btn = e.path.slice(0,-2).find(el => el.classList.contains('btn-arrowed'));
btn.classList.add("table__details-row-shown");
setTimeout(() => {
btn.classList.remove("table__details-row-shown");
}, 1500);
}
但有件事告诉我有一种更简单的方法。而且总的来说,我真的很想了解为什么on-click事件在按钮上,但是它是从嵌套在按钮中的svg元素调用的。
由于用户@AleksandrBelous和@Kain(非常感谢)的帮助,我为优化任务的解决方案做了2 个选项:
pointer-events: none时,只有按钮进入,然后您已经可以使用它进行操作,而无需搜索数组。事件处理函数将是这样的:svgevent.targetevent.path