jQuery(四)jQuery事件机制与JavaScript的区别
2016-06-06 00:00
453 查看
jQuery事件机制与JavaScript的区别
单独用一篇来讲这个标题肯定是不行的,但这个其实也是一个比较关键的地方。看过前面文章的同学应该都知道,对于JS而言事件的阶段有捕捉阶段和冒泡阶段。对于Jquery而言他只有冒泡阶段,这个地方是比较关键的地方。
体现冒泡阶段的一段jquery代码(js的请回看js系列):
两种方式进行对冒泡事件的阻止,当然是有这个阻止的需求的前提哈。
1.借助event.target保留了发生事件的目标元素//js中也可以使用
2.使用停止事件传播的方法
下面会引入一个概念:默认操作,这个体系是和事件传播不同的。两者任意一个发生都会终止另一个,同时终止两个要return false;或者一起调用 stopPropagation();和.preventDefault();其实就解释了为什么我的js有一次必须要使用return false,才行。
事件委托:当为每一个按钮都注册一个事件的,如果是对一个表格内的所有按钮进行操作的话如果都注册事件,其实是一个极其浪费内存,影响性能的一件事情。一个很好的方式就是利用冒泡原理,将事件进行委托给最顶层的其中一个元素,其实我在js里面都已经有这个思想了,查看js实现开源中国IT技能页面的思想。代码如下:
代码只对了一个按钮操作,你可以对更多的按钮进行操作,还是比较简单关键的就是event.target记录的点击事件的元素,包括了它的id,class,value值等属性。
模拟用户操作事件:jquery里面提供了两种方式,不带参数的使用简写方法,使用.trigger()方法
键盘事件:最关键的一个实践经验,用户按了哪个键,监听keyup或keydown,用户输入了什么字符,应该监听keypress事件(按下不放可以输入很多字符,有一个字符输入就除非事件)。这个地方就是最关键的地方。
单独用一篇来讲这个标题肯定是不行的,但这个其实也是一个比较关键的地方。看过前面文章的同学应该都知道,对于JS而言事件的阶段有捕捉阶段和冒泡阶段。对于Jquery而言他只有冒泡阶段,这个地方是比较关键的地方。
体现冒泡阶段的一段jquery代码(js的请回看js系列):
$(document).ready(function(){ $('div').click(function(event){ alert("div"); }); $('#mBtn').click(function(){ alert("mBtn"); event.stopPropagation(); }); }); //html页面 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript" src="js/jquery.js" ></script> <script type="text/javascript" src="js/event.js" ></script> </head> <body> <div> <p>测试事件的冒泡<p> <input class="button" id="mBtn" type="button" value="maopao" /> <a href="http://www.baidu.com">enen</a> </div> </body> </html>
两种方式进行对冒泡事件的阻止,当然是有这个阻止的需求的前提哈。
1.借助event.target保留了发生事件的目标元素//js中也可以使用
$(document).ready(function(){ //对外层加一个判断,function中必须带参数,不然用的就是全局的无法进行判断 $('div').click(function(event){ if(event.target==this){ alert("div"); } }); $('#mBtn').click(function(){ alert("mBtn"); }) });
2.使用停止事件传播的方法
$(document).ready(function(){ $('div').click(function(event){ alert("div"); }); //使用全局event的停止事件传播方法 $('#mBtn').click(function(){ alert("mBtn"); event.stopPropagation(); }); });
下面会引入一个概念:默认操作,这个体系是和事件传播不同的。两者任意一个发生都会终止另一个,同时终止两个要return false;或者一起调用 stopPropagation();和.preventDefault();其实就解释了为什么我的js有一次必须要使用return false,才行。
事件委托:当为每一个按钮都注册一个事件的,如果是对一个表格内的所有按钮进行操作的话如果都注册事件,其实是一个极其浪费内存,影响性能的一件事情。一个很好的方式就是利用冒泡原理,将事件进行委托给最顶层的其中一个元素,其实我在js里面都已经有这个思想了,查看js实现开源中国IT技能页面的思想。代码如下:
function entrust(){ $('body').click(function(event){ if($(event.target).is('.button')){ if(event.target.id=='mBtn'){ alert('mBtn'); }else{ alert("error!"); } } }); }
代码只对了一个按钮操作,你可以对更多的按钮进行操作,还是比较简单关键的就是event.target记录的点击事件的元素,包括了它的id,class,value值等属性。
模拟用户操作事件:jquery里面提供了两种方式,不带参数的使用简写方法,使用.trigger()方法
$('#mBtn').click(); $('#mBtn').trigger('click');
键盘事件:最关键的一个实践经验,用户按了哪个键,监听keyup或keydown,用户输入了什么字符,应该监听keypress事件(按下不放可以输入很多字符,有一个字符输入就除非事件)。这个地方就是最关键的地方。
$(document).keyup(function(event){ switch(String.fromCharCode(event.keyCode)){ case 'D': alert("DDDD!!!");break; case 'F': alert("FFFF!!!");break; } });
相关文章推荐
- jQuery(五)jQuery特效与动画
- jQuery(六)jQuery DOM操作
- jquery属性的相关js实现方法
- 如何自己开发一款js或者jquery插件
- jquery插件方式实现table查询功能
- 原生js实现jQuery的ready方法
- jquery中Callbacks对象的实现
- jquery ajax给外部变量赋值 async: false
- 初次接触JQuery
- JQuery中易混淆的概念
- jQuery克隆和替换节点
- jQuery的html()和val()方法
- jQuery动画效果
- jQuery移除事件
- jQuery冒泡事件
- jQuery包裹节点
- jQuery事件处理
- jQuery获取radio_checkbox_select的值
- jQuery-AJAX
- jQuery与Ajax的应用