如果你想使用 的动态版本.on()
,那么你需要使用这种形式:
$(staticParentSelector).on('click', '.displayBig', fn);
staticParentSelector
必须是指向动态对象的父级的选择器,并且在您运行上述 jQuery 以安装事件处理程序时存在,并且它必须是在安装事件处理程序后未被销毁和重新创建的对象。匹配第二个选择器(我将称之为动态选择器)的对象最初不需要存在,并且可以在将来的任何时间创建。
在最坏的情况下,它可能是这样的:
$(document).on('click', '.displayBig', fn);
由于该document
对象满足静态父对象的所有条件。但是,如果您选择一个更接近实际动态对象的静态父对象,并且您不将该document
对象用于所有动态事件,您的事件将执行得更好。
所以,如果你有这样的 HTML:
<div id="container">
<a href="images/large_4.jpg" class="displayBig" data="gallery0">
<div id="magnify">dsfsfdsfs</div>
</a>
</div>
然后,您将使用这样的动态版本.on()
:
$("#container").on('click', '.displayBig', fn);
动态版本的.on()
工作方式是将单个事件处理程序绑定到静态对象。然后,当有人单击您的动态对象之一时,该对象上没有针对单击的直接事件处理程序,因此单击会通过祖先对象冒泡。当事件到达具有事件处理程序的 staticParent 对象时,它会看到安装了动态事件处理程序,并将发起事件的对象与动态选择器进行比较。如果它们匹配,它会触发事件处理程序。如果它们不匹配,则不会触发任何事件。