-1

我刚刚发现 delegate 它看起来真的很有用,但是即使在阅读了文档之后,我仍然对某些事情感到困惑。

以前我像这样绑定我的所有事件:

$("#myTextBox").on("input", control.Search);

现在我正在根据这样的文档进行操作:

$("#myDiv").delegate("#myTextBox", "input", control.Search);

为什么委托使用两个选择器?为什么不只是:

$("#myTextBox").delegate("input", control.Search);
4

4 回答 4

2

第一个选择器是您将哪个元素用作“根”或“基”元素,第二个选择器是您将事件处理程序附加到的那个。它的目的是允许您将事件处理程序附加到较低级别的元素(较低级别意味着 DOM 更下方的元素),但在更高级别处理它。它的用处在于当您拥有动态 DOM 时,例如在 TABLE 中添加一堆行,这些行具有用于删除行或其他内容的按钮。

您还可以使用on()方法执行相同的交易。

于 2013-09-10T12:34:07.703 回答
1

来自 jQuery 文档.delegate

根据一组特定的根元素,将处理程序附加到现在或将来与选择器匹配的所有元素的一个或多个事件

.on 仅绑定到调用.on时存在的元素上的事件:

将一个或多个事件的事件处理函数附加到选定元素

您还应该注意,根据文档:

从 jQuery 1.7 开始,.delegate() 已被 .on() 方法取代

于 2013-09-10T12:32:04.303 回答
0

JQuery 的文档很好地解释了这一点:http ://api.jquery.com/delegate/ 此外,自 JQuery 1.7 以来,委托已被弃用。

于 2013-09-10T12:32:49.643 回答
0

.delegate()用于使用事件委托注册事件处理程序...

当使用正常的事件注册时,它仅将处理程序注册到在执行注册代码时存在于 dom 中的那些元素。当我们可能不得不处理动态添加的元素时,这种方法可能不可行。

在事件委托模型中,处理程序被注册到一个祖先元素,当页面加载时会出现一个选择器以过滤掉源元素。这利用了事件传播——一个元素中发生的事件被传播到所有祖先元素(很少有像焦点事件这样的例外)。因此,一个元素中发生的事件会传播到其中一个元素中的祖先元素,然后注册处理程序,然后事件源元素(event.target)及其祖先与作为第二个参数传递的选择器匹配,如果满足则处理程序被执行。 http://api.jquery.com/on/#direct-and-delegated-events

因此在 的情况下delegate(),事件处理程序被添加到调用该delegate()方法的元素集合中,并且当input事件从其后代冒泡到元素时,选择器用于确定是否执行该事件的处理程序。

于 2013-09-10T12:36:57.013 回答