传统事件绑定、DOM2级事件绑定、以及IE事件绑定区别
来源:互联网 发布:南木梁知 编辑:程序博客网 时间:2024/06/05 22:54
传统与DOM2级事件绑定的区别:
1.传统事件绑定同一事件句柄只能绑定一个事件函数,绑定多个后面的会覆盖前面的;DOM2级支持同一元素的同一事件句柄可以绑定多个监听函数;
传统:window.onnload=function(){
alert("a");
}
window.onnload=function(){
alert("b");
}
打印 b//跨浏览器事件绑定
function addEvent(element,type,handler){
if(element.addEventListener){
element.addEventListener(type,handler,false);
}else if(element.attachEvent){
element.attachEvent("on"+type,handler);
}else{
element["on"+type]=handler;
}
}
addEvent(window,"load",function(){
alert("1");
});
addEvent(window,"load",function(){
alert("2");
});
打印:1 2 IE打印:2,1
DOM2级与IE区别:
1.同一事件句柄绑定的多个监听函数,DOM2级按正序触发,IE按反序触发,例子如上
2.如果在同一元素的同一事件句柄上多次注册同一函数,DOM2第一次注册后的所有注册都被忽略;IE不会忽略
window.onload=function(){var oBtn=document.getElementById("button");
addEvent(oBtn,"click",fn);
addEvent(oBtn,"click",fn);
addEvent(oBtn,"click",fn);
}
function fn(){
alert("button");
}
打印一次button,IE打印三次
3.在函数体内不必用使用event = event || window.event; 来标准化Event 对象;IE的attach中本身就传递了event
window.onload=function(){
var oBtn=document.getElementById("button");
addEvent(oBtn,"click",fn);
}
function fn(e){
alert(e.clientX); //e 不必做兼容
}
3.this传递:attach方法事件处理程序会在全局作用域下运行,IE的this传递传递代表的是window
解决方法:对象冒充
function addEvent(element,type,handler){
if(element.addEventListener){
element.addEventListener(type,handler,false);
}else if(element.attachEvent){
element.attachEvent("on"+type,function(){ //加个匿名函数
handler.call(element); //对象冒充
});
}else{
element["on"+type]=handler;
}
}
function fn(){
//alert(e.clientX); //事件不必做兼容
alert(this.value);
}
handler.call(element,123,445); //默认第一个参数传给this,后面的可以通过形式参数来获取
function fn(a,b){
//alert(e.clientX); //事件不必做兼容
alert(a); //123
alert(b); //456
alert(this.value);
}
使用了call 传递this,带来的诸多另外的问题:1.无法标准化event;2.无法删除事件。
导致的原因很明确,就是使用了匿名函数。标准化event 可以解决,无法删除事件就没有办
法了,因为无法确定是哪一个事件。
obj.attachEvent('on' + type, function () {
fn.call(obj, window.event);
});
function fn(e){
alert(e.clientX); //事件不必做兼容
}
- 传统事件绑定、DOM2级事件绑定、以及IE事件绑定区别
- DOM2级事件绑定的兼容处理
- 绑定事件
- 绑定事件
- 绑定事件
- 事件绑定
- 事件绑定
- 事件绑定
- 事件绑定
- IE 动态绑定click事件
- react 实现双向绑定以及事件绑定
- JS中的事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE
- JS中的事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE
- JS中的事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE
- 传统的javascript中事件绑定操作
- JavaScript事件绑定和普通事件区别
- JavaScript事件绑定和普通事件区别
- JavaScript事件绑定和普通事件区别
- java网络编程(URL类)
- Json格式
- 安卓中进行基于HTTP协议的网络访问
- ORA-01045: user lacks CREATE SESSION privilege解决办法
- 【32】树的子结构
- 传统事件绑定、DOM2级事件绑定、以及IE事件绑定区别
- poj1363 Rails(栈模拟)
- 执行py文件
- JavaWeb学习总结(四)_http协议
- URLConnection
- <html>table、th
- sdutoj 3363 数据结构实验之图论七:驴友计划
- PowerDsigner 15.1 对实体的属性增加域
- JAVA 中消息提示框