0
doc = $(document),
win = $(window);

doc.on("click",function(){
    alert("test") //working in all browser
})

//but..

win.on("click",function(){
    alert("test") //not working in ie7 ie8
})

我想知道为什么document在所有浏览器中都能正常工作,但$(window)在 IE7 或 IE8 中都不起作用。

4

3 回答 3

1

只是一个评论......</p>

早在浏览器大战时期,微软和网景就为他们的浏览器开发了截然不同的事件模型。W3C 在一定程度上对这些进行了标准化,但该标准是两者之间的一种折衷方案,许多东西仍然是双方专有的。

Netscape 死后,Mozilla.org 从灰烬中重生,催生了一堆浏览器(Mozilla、Firefox、Camino 等)。Mozilla 很好地实现了 W3C 标准,因此 Web 开发人员在必要时支持 W3C 标准和 IE 专有的东西。NN 的专有方法很快就被淘汰了,因此迅速减少的 Netscape Navigator (NN) 用户群变得焦躁不安,不得不购买新的浏览器。

另一方面,IE 拥有大约 95% 的用户份额,因此微软决定保留其大部分专有行为,同时支持它认为必要的标准。顺便说一句,为了生存,Opera 在这个时候非常像 IE,Mozilla 实现了许多不与标准冲突的 IE 东西(以及一些与标准冲突的东西),出于同样的原因。

因此,虽然大多数专有的 NN 东西消失了,但 IE 的东西一直存在,直到 MS 认为他们可以丢弃它。即使在最新版本中,仍然存在一些旧的 IE 专有内容,但其中一些仍然存在。

为了达到今天的水平,每个人都需要为标准而共同努力。请注意,当 IE 6 发布时,它很容易成为最符合标准的浏览器(但它固步自封的时间太长了,这是垄断力量的不利一面)。

也许 MS 有这个权利,在文档上设置的点击事件不应该冒泡到窗口。但很明显,大多数编写标准的人并不是这么想的,所以他们以不同的方式编写了它(请注意,MS 为 Web 标准机构做出了贡献,因此它有机会发表意见)。

无论如何,从版本 9 开始,IE 似乎和其他版本一样。据我所知,这种行为直到 HTML5(第 6.1.6.4 节事件和 Window 对象)才标准化,但很高兴被证明是错误的。

于 2012-06-21T02:49:47.447 回答
1

$(window)并且$(document)是围绕完全不同对象的 jQuery 包装器。功能上的差异仅仅是由于 Internet Explorer 中的兼容性问题;有些事件处理程序window不起作用,所以你把它们放在上面document

于 2012-06-21T01:53:20.467 回答
0

该窗口与实际程序窗口有关,而文档与加载的页面的 html 页面和内容区域有关。

于 2012-06-21T01:54:25.987 回答