解释使用动态生成的DOM属性的IE事件绑定机制
Explain this IE event binding mechanism using dynamically generated DOM properties
我继承了一个非常难看的事件绑定包装器,我不知道它的原理。我所知道的是IE实现的插件,使用它打破,如果我试图取代它与一个简单的attachEvent
或别名通过jQuery这段代码的作者已经在地方这么长时间,他已经忘记了它是什么和为什么。
function AddEvent(obj, type, fn) {
if (obj.attachEvent) {
obj['e' + type + fn] = fn;
obj[type + fn] = function() {
obj['e' + type + fn](window.event);
};
obj.attachEvent('on' + type, obj[type + fn]);
}
else {
obj.addEventListener(type, fn, false);
}
};
我熟悉将函数直接附加到以事件钩子命名的HTML属性或DOM属性的非常基本的方法,但这看起来要糟糕得多。以下是我对发生的事情的解释:
创建一个字符串,前缀e
,由事件钩子标签和字符串强制函数(!?)组成;在元素上创建一个同名的属性,并将函数赋值给它。
obj['e' + type + fn] = fn;
没有前缀的同一字符串将是元素的另一个属性,它调用一个函数,该函数反过来执行原始传递的函数(出于某种原因使用我们刚刚定义的别名),window.event
作为参数。
obj[type + fn] = function() {
obj['e' + type + fn](window.event);
};
最后,使用attachEvent
方法将前面的函数绑定到事件钩子。
obj.attachEvent('on' + type, obj[type + fn]);
你可以用:
function AddEvent(obj, type, fn) {
if (obj.attachEvent) {
obj.attachEvent('on' + type, function (event) {
return fn(event || window.event);
});
}
else {
obj.addEventListener(type, fn, false);
}
};
除非有一些依赖于obj
的两个非常奇怪的属性名的污染
相关文章:
- "无法获取属性'的值;style'"当试图在IE中更改样式时
- 无法获取属性'字符串'的未定义或null引用IE 11 ASP.NET
- Javascript 错误:对象在 IE 浏览器中不支持此属性或方法
- IE错误:无法设置属性'的值;样式':对象为null或未定义
- 占位符属性嵌入IE中的iframe时不起作用
- 可以't使用iframe获取占位符属性以在IE中工作
- IE:无法获取属性'的值;clientWidth':对象为null或未定义
- 这个关键字在Safaari vs.Chrome,Firefox,IE中具有select box onchange属性
- 属性='值'jquery选择没有'我不在IE工作
- 在IE中没有开发人员控制台的情况下,JavaScript无法运行(can't属性为缺少控制台)
- 拖放文件时,dataTransfer.items属性在Firefox和IE中未定义,但在Chrome中未定义
- 无法在 IE 10 中获取属性错误
- 无法在 IE 中设置选项元素的属性
- 在IE 7中,如果链接是使用jQuery创建的,如何获取链接的href属性的文字值
- 对象不支持此属性或方法 - IE 7/8
- (仅在IE中)SCRIPT65535:对方法或属性访问的意外调用.主.js,第 152 行字符 28
- IE 错误 .JavaScript 运行时错误:对象不支持属性或方法“preventDefault”
- Javascript“构造函数”属性中的错误 - IE 8
- 在Firefox和IE中获取CSS属性时遇到麻烦
- “无法获取未定义或空引用的属性'getData'”在IE中,但不能在Chrome中获取