zoukankan      html  css  js  c++  java
  • jQuery.on() 函数详解 【转载】

    注意事项

    1:on()为指定元素的一个或多个事件绑定事件处理函数。(可传递参数)

    2:从jQuery 1.7开始,on()函数提供了绑定事件处理程序所需的所有功能,用于统一取代以前的bind()、 delegate()、 live()等事件函数。

    3:即使是执行on()函数之后新添加的元素,只要它符合条件,绑定的事件处理函数也对其有效。

    4:此外,该函数可以为同一元素、同一事件类型绑定多个事件处理函数。触发事件时,jQuery会按照绑定的先后顺序依次执行绑定的事件处理函数。

    5:要删除通过on()绑定的事件,请使用off()函数。如果要附加一个事件,只执行一次,然后删除自己,请使用one()函数。

    6:该函数属于jQuery对象(实例)。


    语法

    用法一

    jQueryObject.on( events [, selector ] [, data ], handler )

    用法二

    jQueryObject.on( eventsMap [, selector ] [, data ] )

    参数

    参数描述
    events String类型     一个或多个用空格分隔的事件类型和可选的命名空间,例如"click"、"focus click"、"keydown.myPlugin"。
    eventsMap Object类型   一个Object对象,其每个属性对应事件类型和可选的命名空间(参数events),属性值对应绑定的事件处理函数(参数handler)。
    selector 可选/String类型一个jQuery选择器,用于指定哪些后代元素可以触发绑定的事件。如果该参数为null或被省略,则表示当前元素自身绑定事件(实际触发者也可能是后代元素,只要事件流能到达当前元素即可)。
    data 可选/任意类型触发事件时,需要通过event.data传递给事件处理函数的任意数据。
    handler Function类型指定的事件处理函数。







    参数handler中的this指向当前匹配元素的后代元素中触发该事件的DOM元素。如果参数selector等于null或被省略,则this指向当前匹配元素(也就是该元素)。

       on()还会为handler传入一个参数:表示当前事件的Event对象

       参数handler的返回值与DOM原生事件的处理函数返回值作用一致。例如"submit"(表单提交)事件的事件处理函数返回false,可以阻止表单的提交。

       如果事件处理函数handler仅仅只为返回false值,可以直接将handler设为false


    返回值

    on()函数的返回值为jQuery类型,返回当前jQuery对象本身。

    重要说明(绑定原理)

    如果传递了selector参数,那么on()函数并不是为当前jQuery对象匹配的元素绑定事件处理函数,而是为它们的后代元素中符合选择器selector参数的元素绑定事件处理函数。on()函数并不是直接为这些后代元素挨个绑定事件,而是委托给当前jQuery对象的匹配元素来处理。由于DOM 2级的事件流机制,当后代元素selector触发事件时,该事件会在事件冒泡中传递给其所有的祖辈元素,当事件流传递到当前匹配元素时,jQuery会判断是哪个后代元素触发了事件,如果该元素符合选择器selector,jQuery就会捕获该事件,从而执行绑定的事件处理函数。


    问题:

    jquery中用on来绑定事件,经常的写法有
    $(document).on('click','.classname',function(){});
    $('.classname').on('click',function(){});

    上面两种都是给类是classname的元素添加了click事件,那这两个写法有什么区别呢?在效率上哪个更好呢?

    同样的,
    $(document).on('click','#idname',function(){});
    $('#idname').on('click',function(){}); 

    这个是个id为idname的原始 绑定click事件,这两种写法又有什么不同呢?

    解释:

    $(document).on是把事件委托到document上,$('className').on是把事件绑定到.className元素上。效率方面,直接绑定在元素上会更为高效,绑定在document上,每次document有点击动作,浏览器都会判断当前点击的对象,如果匹配,再决定要不要执行,多了一个判断的环节。但在目前开发中,JS渲染效率很高,所以此异同基本可以忽略不计。此外,针对$(document).on的触发特点,延伸一下,$("className").on为onclick绑定,只有在页面onload的时候执行一次,当页面刷新后,新加载的具有className的元素便没有事件绑定到上面了,相反$(document).on这种方法会刷新和重新赋予绑定操作,所以一定程度上更为全面。

    原文见 http://www.365mini.com/page/jquery-on.htm / http://bbs.csdn.net/topics/390663982/

  • 相关阅读:
    Git 之 git原理简介
    Django 之 富文本编辑器-tinymce
    Django 之 Ajax
    Django 之 分页
    Django 之 用redis存储session
    Django 之 自定义中间件
    python 之 多线程、多进程代码
    反转字符串
    青蛙跳台阶
    pandas 之 concat
  • 原文地址:https://www.cnblogs.com/cndotabestdota/p/5706731.html
Copyright © 2011-2022 走看看