jQuery中有一个很常用的事件绑定方法on(),它有很多的语法形式,其中较为常用的是.on('事件名称', '选择器', 回调函数)。
然而,当我们需要绑定的元素动态生成时,使用.on()方法并不能直接达到我们的目的,因为在绑定时无法得到动态生成的元素。这时就需要使用委托事件的方法,即delegate()或者其简写形式(从jQuery1.7开始)。委托事件的方法就是先将事件绑定到父元素上,再通过选择器指定子元素,从而达到委托的作用。
使用delegate()方法绑定事件的语法为:
$(父元素选择器).delegate(子元素选择器, '事件名称', 回调函数);
而使用.on()方法来委托事件的语法为:
$(父元素选择器).on('事件名称', 子元素选择器, 回调函数);
两者非常相似,但最主要的区别在于.on()方法可以绑定多个事件,而.delegate()方法只能绑定一个事件名称。另外,.delegate()方法已被标记为废弃,推荐使用.on()方法。
由于委托事件的原理是让父元素代理执行子元素的事件,所以可以利用它实现一些高级用法。比如在动态生成的表单中,可以通过绑定form元素的submit事件,然后通过选择器指定提交按钮来达到统一处理表单提交的目的。
$('form').on('submit', 'button[type=submit]', function() { // 代码逻辑 });
这样我们就可以对动态生成的表单进行全局处理,而无需为每个表单都单独绑定事件。