javascript 跨浏览器的事件系统3
这部分说一下最近非常流行的事件代理。事件代理的实现简单来说,是把事件绑定到目标元素的祖先元素上,然后通过冒泡或捕获得到事件源,然后再判定事件源是否等于目标元素再执行回调函数。由于对目标元素的判定有时非常模糊,因此通过判定即可调用回调函数,这样,我们就达到一个监听器为许多事件源服务的目的。对于性能一向非常不怎么样的IE6来说,实在帮了一个大忙。
假如,有一个无序列表,点击弹出它的innerHTML,如果按事件绑定的做法,代码大概是这样:
var addEvent = function(el,type,callback,data){
if ( el.addEventListener ) {//如自定义对象就绑定回调函数了
el.addEventListener( type, callback, !!data );
} else if ( el.attachEvent ) {
el.attachEvent( "on" + type, function(){
return callback.call(el,window.event)
} );
}
}
var els = document.getElementsByTagName("li")
for(var i=0,n=els.length;i<n;i++){
addEvent(els[i],"click",function(){
alert(this.innerHTML)
})
}
}
<!doctype html>
<html lang="zh-ch" id="html">
<head>
<meta charset="utf-8" />
<meta content="IE=8" http-equiv="X-UA-Compatible"/>
<title>事件代理 by 司徒正美</title>
<script type="text/javascript">
window.onload = function(){
var addEvent = function(el,type,callback,data){
if ( el.addEventListener ) {//如自定义对象就绑定回调函数了
el.addEventListener( type, callback, !!data );
} else if ( el.attachEvent ) {
el.attachEvent( "on" + type, function(){
return callback.call(el,window.event)
} );
}
}
var els = document.getElementsByTagName("li")
for(var i=0,n=els.length;i<n;i++){
addEvent(els[i],"click",function(){
alert(this.innerHTML)
})
}
}
</script>
</head>
<body id="body">
&l
相关文档:
//1.类
function Test(id)
{
this.id=id;
this.method=function()
{
//代码
};
}
......
var sDate = new Date(Date.UTC(arys[0], arys[1] - 1, arys[2]));
var eDate = new Date(Date.UTC(arys1[0], arys1[1] - 1, arys1[2]));
......
Marquee图片无缝滚动关键词: Marquee
先了解一下 ......
这是一道涵盖了初级、高级javascript
的趣味
题目,如果你在不运行程序
的条件下能正确回答下面的函数
调用的结果,那么你对javascript的理解应该比较到位了,至少我(http://www.attjs.com
站长)是这样认为的。
主要涉及javascript面向对象特性、重载、覆盖、作用域、函数特性、还有一个相对与C/C++
java特有的一 ......
上次说到我们在无菌环境中设计了一个事件代理函数,但性能是个问题,解决它我们需要缓存节点集合,发现节点集合不足以应对新情况时,再替换这个节点集合,重新开始匹配。下面是新的方案:
var delegate = function(selector,type,callback){
var els = $(selector);
addEvent(document,t ......