冒泡型事件(bubbling):事件由叶子节点沿祖先节点一直向上传递到根节点
捕获型事件(capturing):由dom树最顶元素一直到最精确的元素,与冒泡型事件相反
dom标准事件模型:dom标准既支持冒泡型事件,也支持捕获型事件,可以说是两者的结合体,首先是捕获型,接着冒泡传递
二、事件对象
在ie浏览器中事件对象是window的一个属性,在dom标准中,event必须作为唯一的参数传给事件处理函数
获得兼容的event 对象:
function(event){ //event 是作为dom标准的参数传入处理函数 event = event ?event : window.event; }
在ie中,事件的对象包含在event的srcelement中,而在dom标准中,对象包含在target属性中
获得兼容的event 对象指向的元素:
var target =event.srcelement ? event.srcelement : event.target ;
前提是,保证event对象已经正确的获取
三、事件监听器
ie下,注册的监听器逆序执行,即后面注册的先执行
element.attachevent('onclick',observer); //注册监听器 element.detachevent('onclick',observer) //移除监听器
第一个参数为事件名称,第二个为回调处理函数
dom标准下:
element.addeventlistener('click',observer,usecapture) element.removeeventlistener('click',observer,usecapture)
第一个参数为事件名称,没有“on”的前缀,第二个参数为回调处理函数,第三个参数说明回调函数是在捕获阶段调用还是冒泡阶段调用,默认true为捕获阶段
四、事件传递
兼容地取消浏览器的事件传递
function somehandler(event){ event = event || window.event; if(event.stoppropagation) //dom标准 event.stoppropagation(); else event.cancelbubble = true; //ie标准 }
取消事件传递后的默认处理
function somehandler(event){ event = event || window.event; if(event.preventdefault) //dom标准 event. preventdefault (); else event.returnvalue = true; //ie标准 }
以上就是javascript事件模型、对象、监听、传递代码实例详解的详细内容。
