事件处理分级
HTML 事件处理程序
DOM 0 级 事件处理程序
对于同一个 dom 节点而言,只能注册一个,后边注册的同种事件会覆盖之前注册的
DOM 2 级 事件处理程序
<input type="button" value="按钮" id="btn" onclick="showMsg()" />
<button id="btn2">按钮2</button>
<input type="button" value="按钮3" id="btn3" />
<script type="text/javascript">
// html级
function showMsg(event) {
console.log(this);
console.log(event); // 事件对象 可以获取很多有用的信息,比如点击的坐标、具体触发该事件的dom元素等等
}
// Dom 0级别
var btn2 = document.getElementById("btn2");
btn2.onclick = showMsg;
// Dom 2级别
var btn3 = document.getElementById("btn3");
btn3.addEventListener("click", showMsg, false); // 添加事件监听
// btn3.removeEventListener('click',showMsg,false); // 移除监听
// ie 8 及更早浏览器
if (btn3.attachEvent) {
btn3.attachEvent("onclick", showMsg);
btn3.detachEvent("onclick", showMsg);
}
</script>
事件冒泡和事件捕获
事件冒泡 内层节点先接收事件,然后逐级向外层节点传递
事件捕获 外层节点先接收事件,然后逐级向内层节点传递
跨浏览器事件处理程序
浏览器能力检测 先优先考虑 dom2 级,再兼容 ie,再使用 dom 0 级
<input type="button" value="按钮" id="btn" />
<button id="btn2">按钮2</button>
<input type="button" value="按钮3" id="btn3" />
<script type="text/javascript">
var eventUtil = {
// 添加事件
add:function(e,t,h){
if(e.addEventListener){
e.addEventListener(t,h,false);
}else if(e.attachEvent){
e.attachEvent('on'+t,h);
}else {
e['on'+type] = h;
}
},
// 删除事件
delete:function(e,t,h){
if(e.removeEventListener){
e.removeEventListener(t,h,false);
}else if(e.detachEvent){
e.detachEvent('on'+t,h);
}else{
e['on'+t] = null;
}
}
}
eventUtil.add(document.getElementById('btn'),'click',function(){
console.log(this);
});
eventUtil.add(document.getElementById('btn2'),'click',function(){
console.log(this);
});
eventUtil.add(document.getElementById('btn3'),'click',function(){
console.log(this);
});
</script>
处理传递的事件对象
function showMsg(event) {
console.log(event.type); // 事件类型
console.log(event.target); // 该事件的dom
console.log(event.srcElement); // 该事件的dom ie
if (event.stopPropagation) {
event.stopPropagation(); // 阻止事件冒泡
} else {
event.cancelBubble = true; // 阻止事件冒泡 ie
}
if (event.preventDefault) {
event.preventDefault(); // 阻止默认事件行为
} else {
event.returnValue = false; // 阻止默认事件行为 ie
}
}
eventUtil.add(document.getElementById("btn"), "click", showMsg);