jQuery 再探 event , jQuery 对于 DOM 的跨浏览器封装。

本秂侑毒 提交于 2020-03-08 17:26:37

Javascript再探 event 事件。

我们知道浏览器中有很多的差异性,比如对于 浏览器中的 event 事件进行处理的方式, IE 明显的就和别的浏览器不一样。所以后来诞生了风靡前端的 jQuery 库。我原先以为jQuery库只是在 jQuery 对象得到层面对于一般的 javascript 代码进行了跨浏览器整合和优化。但是今天在用的时候也发现了,对于部分的DOM 也进行了跨浏览器整合。下面就以我碰到的 event 做一个例子。

jQuery 中进行 event handle attachment 的时候。自然会有对应的 handle 处理函数。在jQuery 中的 handle 处理函数中可以带入 event 参数,这里带入的 event 的参数的话可是 jQuery 进行了再次封装的了。而不再是原先的原生 dom event 了。但是 jQuery 封装 NB 的一点就体现在,虽然对此 dom 进行了二次封装,但是原则上还是和 DOM 标准制定的规则保证了高度一致性,比如 event.target event.currentTarget 都和 DOM 标准中的规则一模一样。

除了这些原 DOM 有的属性外,当然 jQuery 也加入了自己库中的一些特性。最为典型的就是event.delegateTarget。官方的 API 解释为:Description: The element where the currently-called jQuery event handler was attached. 返回的是绑定事件的 jQuery 对象。

大概的介绍就介绍完了,反正在使用的时候你会感觉到 jQuery 原生库对于前端开发人员强大的便利的。再也不用担心各个浏览器之间的不同了,真的是超级 HIGH 的一种体验。下面介绍有关 event 的跨浏览器 jQuery的处理办法。

只需要在 attachment 函数中的 handle 处理函数的参数加上 event 参数,就可以在 handle 处理方法中使用 jQuery 给予的跨浏览器 event 对象。

IE 浏览器下:

不使用 jQuery – event

和使用 jQuery – event 差别巨大,具体直接可见代码。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>IE event.target 探究</title>

 

<style type="text/css">

 

</style>

<script type="text/javascript" src="jquery-1.7.2.min.js"></script>

<script type="text/javascript">

$(document).ready(function(){

 

       /* not use event as parameter */

       $("#t1").delegate(".cont","click",function(){

              // 这里 function 中的 event 是原生 DOM event 对象,所以各个浏览器实现的方式可能会有区别

              alert(event.target);    // return undefined

 

              // 为了验证这个是 DOM event 使用如下代码可以看出。

              // IE 独有 srcElement ,相当于 标准 DOM 中的 event.target

              alert(event.srcElement);   // return standard event.target

 

       });

 

       /* use event as parameter */

       $("#t2").delegate(".cont","click",function(event){

              // 这里 function 中的 event jQuery event 做了跨浏览器封装

              // 在所有浏览器下效果一致

              alert(event.target);           // retrun standard event.target

       });

 

});

</script>

</head>

<body>

 

       <table id="t1">

              <legend>element handler without parameter</legend>

              <tr>

                     <td class="cont"><div><input type="checkbox" />333</div></td>

                     <td class="cont"><div><input type="checkbox" />333</div></td>

                     <td class="cont"><div><input type="checkbox" />333</div></td>

                     <td class="cont"><div><input type="checkbox" />333</div></td>

              </tr>    

       </table>

       <br />

       <table id="t2">

              <legend>element handler with parameter event</legend>

              <tr>

                     <td class="cont"><div><input type="checkbox" />333</div></td>

                     <td class="cont"><div><input type="checkbox" />333</div></td>

                     <td class="cont"><div><input type="checkbox" />333</div></td>

                     <td class="cont"><div><input type="checkbox" />333</div></td>

              </tr>    

       </table>

 

</body>

</html>

 

代码的运行效果已经在 return 中标志出来了。大家有时间的话可以拷贝代码运行一下。很容易就能够看出区别了。

这样提醒我们,假如以后再写事件处理函数的时候一定要记住在处理方法中加入 event参数。这样写起来事半功倍。不会造成跨浏览器的一些低级错误。

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>IE 下 event.target 探究</title>

<style type="text/css">

</style>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){

	/* not use event as parameter */
	$("#t1").delegate(".cont","click",function(){
		// 这里 function 中的 event 是原生 DOM event 对象,所以各个浏览器实现的方式可能会有区别
		alert(event.target);	// return undefined

		// 为了验证这个是 DOM event 使用如下代码可以看出。
		// IE 独有 srcElement ,相当于 标准 DOM 中的 event.target
		alert(event.srcElement);	// return standard event.target 

	});

	/* use event as parameter */
	$("#t2").delegate(".cont","click",function(event){
		// 这里 function 中的 event 是 jQuery 对 event 做了跨浏览器封装
		// 在所有浏览器下效果一致
		alert(event.target);		// retrun standard event.target 
	});

});
</script>
</head>
<body>

	<table id="t1">
		<legend>element handler without parameter</legend>
		<tr>
			<td class="cont"><div><input type="checkbox" />333</div></td>
			<td class="cont"><div><input type="checkbox" />333</div></td>
			<td class="cont"><div><input type="checkbox" />333</div></td>
			<td class="cont"><div><input type="checkbox" />333</div></td>
		</tr>	
	</table>
	<br />
	<table id="t2">
		<legend>element handler with parameter event</legend>
		<tr>
			<td class="cont"><div><input type="checkbox" />333</div></td>
			<td class="cont"><div><input type="checkbox" />333</div></td>
			<td class="cont"><div><input type="checkbox" />333</div></td>
			<td class="cont"><div><input type="checkbox" />333</div></td>
		</tr>	
	</table>

</body>
</html>

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!