【发布时间】:2021-02-13 18:51:52
【问题描述】:
如果我动态创建一个元素,然后向它添加一个 onclick="function()",那么为什么不将该代码物理添加到元素中,就像向它添加一个类一样?
问是因为我想在玩家之间来回传递棋盘游戏。我可以通过 AJAX 将容器元素的 innerHTML 发送给下一个玩家,物理游戏将为他们加载 - 但是动态创建的片段上的任何事件处理程序都不再存在。
我是否必须创建一个函数才能将它们放回去?我认为这不会太难,但是如果有一种方法可以在添加到元素时将 onclick 代码写入 html 页面,以便它通过 innerHTML 会更容易。
【问题讨论】:
-
更改
innerHTML的内容将重新渲染其中的所有元素。所以基本上你刷新所有元素。但是关于你的事件。在处理动态内容时,您可以像您建议的那样重新添加事件侦听器,或使用 事件委托 并在动态内容的父元素上侦听事件。 (大多数)事件会冒泡,并且可以在不变的元素上捕获。 -
啊,这是个好主意。有没有办法用网格显示父母在他们的网格中有多个动态创建的孩子?我的意思是有没有办法为每个单独的网格空间放置一个监听器?或者我需要为每个动态创建的元素创建一个单独的父元素吗?
-
onclick / onXXX 是邪恶的:softwaretestinghelp.com/javascript-injection-tutorial 你基本上是在黑自己
-
好的,那我应该怎么做呢? addEventListener 更好吗?还是一样糟糕?
-
是的,它们都有 id 和 class。好的,我刚刚阅读了代表团。因此,我可以通过从被点击的孩子那里获取 ID 或数据属性或其他任何内容来让父母触发正确的功能。这太棒了!谢谢!
标签: javascript ajax onclick eventhandler