jQuery -当你委托一个事件处理程序时,它是否也会自动从不再匹配的元素中移除自己?

jQuery - When you delegate an event handler, will it also auto-remove itself from elements that no longer match?

本文关键字:不再 自己 元素 是否 当你 程序 一个 事件处理 jQuery      更新时间:2023-09-26

假设如下结构

<div id="wrapper">
    <div></div>
    <div class="selected"></div>
    <div></div>
    <div></div>
    <div class="selected"></div>
</div>

我想为所有.selected元素分配一个委托的事件处理程序,这样当新元素被选中时,它们就会自动接收该处理程序。

$("div#wrapper").on("click", "div.selected", function() {
    //do magic
});

现在,每次选择一个新的div时,它将自动接收处理程序。

BUT,如果我取消选择一个div(删除.selected类),它也会自动删除处理程序吗?

正确——你的代码

$("div#wrapper").on("click", "div.selected", function() {
    //do magic
});

应该读作:"当在div#wrapper中发生点击时,当(且仅当)它位于div.selected元素上,运行此函数。"

换句话说,您的事件处理程序实际上是绑定到div#wrapper,而不是它里面的div.selected元素。因此,您可以根据需要添加或删除div.selected,并且委托处理程序将根据需要自动触发它们。