【发布时间】:2019-10-24 15:03:22
【问题描述】:
当我单击 Svelte 中的表格行时,我想创建一个弹出菜单。我使用document.querySelectorAll 方法为onMount 内的每个表格行添加了一个onclick 事件。在onMount 函数中,我还重新渲染了显示的表格。如何将 onclick 值应用于重新渲染的元素?
onMount(() => {
console.log(document.querySelectorAll(".results .table table tbody tr"));
/* -> returns array with only 1 element -> not correct */
/* ... re-render logic here */
}
但是当我添加超时时:
onMount(() => {
setTimeout(() => {
console.log(document.querySelectorAll(".results .table table tbody tr"));
}, 5000);
/* -> returns array with all elements */
/* ... re-render logic here again */
}
可以在here找到包含完整源代码的 REPL
【问题讨论】:
-
您不需要为每一行添加点击事件。捕捉表格上的点击并使用目标来识别行。
-
谢谢您的回答!确实,我可以对表格使用点击事件并选择目标,但是我会遇到其他问题。我会将 td 作为目标而不是行。我还必须检测我是否单击了表头或一行。我必须得到事件处理的行
-
我知道您不需要 th 和 tr 点击。所以忽略它们。
-
您能否重现您在REPL 中看到的问题?目前还不清楚发生了什么。一般来说,您不应该在 Svelte 应用程序的上下文中使用
document.querySelectorAll— 您正在混合和匹配范式(命令式与声明式),这通常不会很好地结束! -
感谢您的提示。我刚刚在我的问题中添加了 REPL 链接
标签: javascript svelte svelte-component