动态创建的元素上的事件绑定?
P粉440453689
2023-08-23 15:04:33
<p>我有一些代码,我循环遍历页面上的所有选择框并将 <code>.hover</code> 事件绑定到它们,以在 <code> 鼠标上调整它们的宽度开/关</code>。</p>
<p>这发生在页面准备好并且工作正常。</p>
<p>我遇到的问题是,在初始循环之后通过 Ajax 或 DOM 添加的任何选择框都不会绑定事件。</p>
<p>我已经找到了这个插件(jQuery Live Query Plugin),但是在我使用插件向我的页面添加另一个 5k 之前,我想看看是否有人知道如何做到这一点,无论是直接使用 jQuery 还是通过其他选项。 </p>
jQuery.fn.on
的文档中有很好的解释一个>.简而言之:
因此,在下面的示例中,
#dataTable tbody tr
在生成代码之前必须存在。如果新的 HTML 被注入到页面中,最好使用委托事件来附加事件处理程序,如下所述。
委托事件的优点是它们可以处理来自稍后添加到文档中的后代元素的事件。例如,如果表存在,但使用代码动态添加行,则以下内容将处理它:
除了能够处理尚未创建的后代元素上的事件之外,委托事件的另一个优点是,当必须监视许多元素时,它们可能会降低开销。在
tbody
中有 1,000 行的数据表上,第一个代码示例将处理程序附加到 1,000 个元素。委托事件方法(第二个代码示例)仅将事件处理程序附加到一个元素,即
tbody
,并且事件只需要向上冒泡一层(从单击的tr
到tbody
)。注意:委托事件不适用于SVG。
从 jQuery 1.7 开始,您应该使用
jQuery.fn.on
并填充了选择器参数:说明:
这称为事件委托,其工作原理如下。该事件附加到应处理的元素的静态父级 (
staticAncestors
)。每次在此元素或后代元素之一上触发事件时,都会触发此 jQuery 处理程序。然后,处理程序检查触发事件的元素是否与您的选择器 (dynamicChild
) 匹配。当存在匹配时,就会执行您的自定义处理程序函数。在此之前,推荐的方法是使用
live()
:但是,
live()
在 1.7 中已被弃用,取而代之的是on()
,并在 1.9 中完全删除。live()
签名:...可以替换为以下
on()
签名:例如,如果您的页面动态创建具有类名
dosomething
的元素,您可以将该事件绑定到已经存在的父级(这是该事件的核心)这里的问题是,你需要一些存在的东西来绑定,而不是绑定到动态内容),这可以是(也是最简单的选项)是document
。但请记住document
可能不是最有效的选择。事件绑定时存在的任何父级都可以。例如
适用于