问答详情
源自:4-2 事件绑定

请问,为什么将事件绑定到列表时不使用on(),而是使用bind()?


现在一般不是使用on()比较多么?

//img4.sycdn.imooc.com/59e6211d0001382e15080682.jpg

提问者:慕少2353462 2017-10-17 23:27

个回答

  • 慕容4446434
    2017-10-22 19:46:17
    已采纳

    bind(type,[data],fn),为每个匹配元素的特定事件绑定事件处理函数,是直接绑定在元素上.

    优点:

        ①. 这个方法提供了一种在各种浏览器之间对事件处理的兼容性解决方案

        ②. .click(), .hover()等事件绑定,都是bind的一种简化处理方式

    缺点:

    ①. 它会绑定事件到所有的选出来的元素上,当绑定的元素较多时(如:表格的每个单元格),会查找和遍历每个单元格,导致脚本执行速度明显变慢;且保存表格的多个单元格元素和相应的处理程序也会占用大量内存。简言之:绑定元素较多时,效率低下,占用内存。

    ②. bind只能给调用它的时候已经存在的元素绑定事件,不能给未来新增的元素绑定事件,即不能动态绑定到新增的元素上

    ③. 当页面加载完的时候,才可以进行bind()

    解决:事件委托/事件代理

    $(selector).on(events,[childSelector],[data],fn) ,在被选当前及未来的元素及子元素上添加一个或多个事件处理程序.

    说明:

    事件绑定与解绑一共有3组(bind、live、delegate),为了避免混乱,自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代品。(推荐使用)