2011-05-09 117 views
1

刚看完PPK的网站,IE浏览器的登记事件的机制没有了this对象设置为被点击的实际元素。相反,它指的是全局窗口对象。该below从他的网站引述:跨浏览器的事件处理和jQuery支持

但是,当您使用Microsoft事件 注册模型,this关键字 并不是指的HTML元素。 与不足,在 微软模型 currentTarget当前类属性的组合,这意味着如果 你做

element1.attachEvent('onclick',doSomething) 
element2.attachEvent('onclick',doSomething) 

你可以不知道哪个HTML元素 目前处理该事件。这是 与微软事件注册模型 和 最严重的问题对我来说它是足够的理由从来没有使用 它,甚至在IE/Win只有 应用程序。

jQuery的处理这个正确!我的意思是,如果我们做类似的事情:

$(element).click(function(){...}); 

this引用问题中的元素。 jquery如何处理IE浏览器的这个问题?什么是它的等价js代码?

回答

3

使用call方法,你可以在任何功能设置this值:

var element = document.getElementById('testy'), 
    someFunction = function() { 
     alert(this.id); 
    }; 

someFunction.call(element); // alerts "testy" 

这是每一个库怎么几乎修复IE的愚蠢“这个”错误:通过添加的包装器监听你通过,让你的听众实际上是called