我很想知道jquery中何时应该使用绑定函数以及何时应该使用委托函数。他们不执行相同的功能吗?有什么区别?
当您有几个现有元素要将事件侦听器绑定到时,可以使用bind
(或者更好的是on
,因为bind
已弃用;由@Yoshi指出)。当您想要处理的元素还不存在时,您可以使用delegate
(例如,它们是动态生成的,您不想将处理程序绑定到您创建的每个新元素,但它们有一个公共的父级,您可以将委托放在上面),或者当您使用一个公共父级处理许多元素上的事件时(在父级上使用委托比在每个元素上使用单独的处理程序更有效)。
DOM事件bubble在DOM层次结构中向上,因此当您单击某个元素时,会触发该元素的onclick
处理程序,然后是其父元素上的处理程序,等等(除非处理程序在事件上调用stopPropagation
,这将取消进一步的冒泡。当您使用bind
/on
时,您将处理程序附加到要处理的特定元素,它由您设置的目标直接触发;当您使用delegate
时,jQuery内部处理程序附加到您指定的元素,它在冒泡链的上游捕获事件;jQuery然后检查实际目标(它是处理程序附加到的元素的子元素)是否与您用委托指定的选择器匹配,如果是,则调用它(它的调用方式就像您的实际处理程序附加在目标元素而不是父元素上一样;由@shannon指出)。