jQuery on()方法是官方推荐的绑定事件的一个方法。

$(selector).on(event,childSelector,data,function,map)

  

由此扩展开来的几个以前常见的方法有.

bind()

$("p").bind("click",function(){
   alert("The paragraph was clicked.");
 });
 $("p").on("click",function(){
   alert("The paragraph was clicked.");
 });

  

delegate()

$("#div1").on("click","p",function(){
    $(this).css("background-color","pink");
  });
  $("#div2").delegate("p","click",function(){
    $(this).css("background-color","pink");
  });

  

live()

$("#div1").on("click",function(){
  $(this).css("background-color","pink");
});
$("#div2").live("click",function(){
  $(this).css("background-color","pink");
});

  

以上三种方法在jQuery1.8之后都不推荐使用,官方在1.9时已经取消使用live()方法了,所以建议都使用on()方法

tip:如果你需要移除on()所绑定的方法,可以使用off()方法处理。

$(document).ready(function(){
  $("p").on("click",function(){
    $(this).css("background-color","pink");
  });
  $("button").click(function(){
    $("p").off("click");
  });
});

  

tip:如果你的事件只需要一次的操作,可以使用one()这个方法

$(document).ready(function(){
  $("p").one("click",function(){
    $(this).animate({fontSize:"+=6px"});
  });
});

  

trigger()绑定

$(selector).trigger(event,eventObj,param1,param2,...)
$(document).ready(function(){
  $("input").select(function(){
    $("input").after(" Text marked!");
  });
  $("button").click(function(){
    $("input").trigger("select");
  });
});

  

多个事件绑定同一个函数

$(document).ready(function(){
$("p").on("mouseover mouseout",function(){
$("p").toggleClass("intro");
});
});

  

多个事件绑定不同函数

$(document).ready(function(){
$("p").on({
mouseover:function(){$("body").css("background-color","lightgray");},
mouseout:function(){$("body").css("background-color","lightblue");},
click:function(){$("body").css("background-color","yellow");}
});
});

  

绑定自定义事件

$(document).ready(function(){
$("p").on("myOwnEvent", function(event, showName){
$(this).text(showName + "! What a beautiful name!").show();
});
$("button").click(function(){
$("p").trigger("myOwnEvent",["Anja"]);
});
});

  

传递数据到函数

function handlerName(event)
{
alert(event.data.msg);
}
$(document).ready(function(){
$("p").on("click", {msg: "You just clicked me!"}, handlerName)
});

  

适用于未创建的元素

$(document).ready(function(){
$("div").on("click","p",function(){
$(this).slideToggle();
});
$("button").click(function(){
$("<p>This is a new paragraph.</p>").insertAfter("button");
});
});

  

jQuery绑定事件的方法有几种,推荐使用.on()方法绑定,原因有两点:

1.on()方法可以绑定动态添加到页面元素的事件

比如动态添加到页面的DOM元素,用.on()方法绑定的事件不需要关心注册该事件的元素何时被添加进来,也不需要重复绑定。有的同学可能习惯于用.bind()、.live()或.delegate(),查看源码就会发现,它们实际上调用的都是.on()方法,并且.live()方法在jQuery1.9版本已经被移除。

bind:
function(
types, data, fn ) {
return this.on(
types, null,
data, fn );
},
live:
function(
types, data, fn ) {
jQuery(
this.context
).on( types, this.selector,
data, fn );
return this;
},
delegate:
function(
selector, types, data, fn ) {
return this.on(
types, selector, data, fn );
}

  

移除.on()绑定的事件用.off()方法。

2.on()方法绑定事件可以提升效率

很多文章都提到了利用事件冒泡和代理来提升事件绑定的效率,大多都没列出具体的差别,所以为了求证,我做一个小测试。

假设页面添加了5000个li,用chrome开发者工具Profiles测试页面载入时间。

普通绑定(姑且这么称呼它)

$('li').click(function(){
console.log(this)
});

  

绑定过程的执行时间

2013-08-13_190358

普通绑定相当于在5000li上面分别注册click事件,内存占用约4.2M,绑定时间约为72ms。

.on()绑定

$(document).on('click',
'li',
function(){
console.log(this)
})

  

绑定过程的执行时间

2013-08-13_191010

.on()绑定利用事件代理,只在document上注册了一个click事件,内存占用约2.2M,绑定时间约为1ms。

以上就是本文的全部内容,希望对大家学习jquery on()方法有所帮助。

最新文章

  1. ppmoney
  2. POJ2505 A multiplication game[博弈论]
  3. Odoo Shell
  4. 纪念逝去的岁月——C/C++冒泡排序
  5. VC6.0编译boost
  6. Windows脚本
  7. C语言中固定大小的数据类型的输入和输出
  8. LabVIEW新手5大错误
  9. 理解会话中的Cookie和Session对象
  10. Photoshop CC 常用快捷方法有哪些?
  11. Linux centos yum仓库 自制
  12. spoj 839-Optimal Marks
  13. 运用jieba库 寻找高频词
  14. ScreenPresso注册码
  15. 《剑指offer(第二版)》面试题64——求1+2+...+n
  16. Python------excel读、写、拷贝
  17. 搭建RESTful API 之 实现WSGI服务的URL映射
  18. [机器学习]-SVD奇异值分解的基本原理和运用
  19. BZOJ.3257.树的难题(树形DP)
  20. Educational Codeforces Round 13 E. Another Sith Tournament 状压dp

热门文章

  1. Opencv 2.4.9在Ubuntu下的配置与安装
  2. windows service自动启动相关设置
  3. OC字符串常用函数
  4. jQuery 常见操作实现方式
  5. CRM 2016 自定义lookup过滤
  6. 用inno Setup制作web项目安装包
  7. [C#常用代码]如何把指定文件夹中的文件移动到指定的文件夹
  8. [SQJ]sql如何实现类似统计的功能
  9. POJ 1611
  10. Regional Changchun Online--Ponds