40px;height:
40px;background-color:
blue">
functionparentCliked(ev){
console.log("parentclicked");
varev=ev?
ev:
window.event;
}
functionchildClicked1(ev){
console.log("childclicked1");
varev=ev?
ev:
window.event;
ev.stopImmediatePropagation();
}
functionchildClicked2(ev){
console.log("childclicked2");
varev=ev?
ev:
window.event;
}
varmyDiv=document.getElementById("myDiv");
vard1=document.getElementById('d1');
myDiv.onclick=parentCliked;
d1.addEventListener("click",childClicked1);
d1.addEventListener("click",childClicked2);
复制代码
打印出:
childclicked1
4.4cancelable和preventDefault();
preventDefault()方法阻止默认行为
cancelable:
返回boolean值,判断能否阻止默认行为(只读)
只有使用addEventListener方法添加的监听器,该属性才有效
复制代码
clickhere
varlink=document.getElementById("aa");
link.addEventListener("onclick",clickHandler);
functionclickHandler(ev){
varev=ev?
ev:
window.event;
ev.preventDefault();
}
复制代码
cancelable是只读的
复制代码
varlink=document.getElementById("aa");
link.addEventListener("click",clickHandler);
functionclickHandler(ev){
varev=ev?
ev:
window.event;
console.log(ev.cancelable);//true
ev.cancelable=false;
ev.preventDefault();
console.log(ev.cancelable);//true
}
复制代码
即使设置了cancelable=true,仍然能阻止默认行为
4.5returnValue:
是否取消默认行为,设置为false则取消默认行为是IE浏览器特有的属性
复制代码
clickhere
varlink=document.getElementById("aa");
link.attachEvent("onclick",clickHandler);
functionclickHandler(ev){
varev=ev?
ev:
window.event;
ev.returnValue=false;
}
复制代码
复制代码
clickhere
varlink=document.getElementById("aa");
link.attachEvent("onclick",clickHandler);
functionclickHandler(ev){
ev.returnValue=false;
}
复制代码
IE中:
当使用attachEvent注册监听器时,可以使用参数ev或者window.event来设置returnValue;
当使用addEventListener注册监听器时
IE9,10window.event.returnValue=false;或者ev.preventDefault();
IE11ev.preventDefault()或者window.event.preventDefault();
当使用obj.onclick=clickHandler形式时
IE9,10,11支持参数传递,但是参数ev对象中没有returnValue属性,通过ev参数来设置行不通
IE5~10可以使用window.event.returnValue=false来阻止默认行为
IE11:
window.event没有returnValue属性,设置失败
综上:
IE浏览器5,6,7,8,9,10都能使用attachEvent来注册监听,使用此方法生成的Event对象是具有IE特性的对象,里面包含了cancelBubble,returnValue等IE标志
IE11废弃了对attachEvent的支持
IE9,10,11实现了对addEventListener的支持,该方法生成的Event对象是符合DOM标准的
IE9,10的ev对象是DOM标准对象,window.event是IE私有对象
IE11的ev对象和window.event都是DOM标准对象
DOM标准对象中没有IE私有属性
4.6srcElement、target、currentTarget
srcElement只在IE浏览器中存在,不管以addEventListener还是attachEvent
它指向触发事件的元素,而不是绑定事件的元素
currentTarget和target:
只有使用addEven
展开阅读全文
相关搜索