我一直想知道为什么不同浏览器的 JavaScript 中事件的 target/sourceElement 的属性名称存在差异。
event.srcElement in Internet Explorer
event.target in most other browsers.
众所周知,Internet Explorer 是一种叛逆的浏览器,尤其是在早期版本中,它遵循自己的 Web API 标准。
尽管此举遭到严厉批评,我们也应该感谢它 http://www.nczonline.net/blog/2012/08/22/the-innovations-of-internet-explorer/,因为它的反叛帮助引入了一些后来成为标准的功能,例如innerHTML
和 AJAX 请求。
在这种特殊情况下,会出现约定上的差异,因为旧版本的 IE 使用与其他浏览器使用的标准模型不同的事件模型。随之而来的是一系列不同名称的对象。From MDN https://developer.mozilla.org/es/docs/Web/API/Event/target:
在IE6-8上,事件模型有所不同。事件监听器已附加
使用非标准 element.attachEvent() 方法。在这个模型中,
事件对象有一个 srcElement 属性,而不是目标
属性,与 event.target 具有相同的语义。
Internet Explorer 开始遵循标准更彻底地例如,在更新的版本中,attachEvent
is 在 IE11 中完全弃用 https://msdn.microsoft.com/library/ms536343(v=vs.85).aspx.
同样的事情也会发生在其他一些东西上,因此如果你想支持旧版本的 IE,你必须使用某些功能的后备。
至于为什么他们不在 Internet Explorer 中添加别名?好吧,他们最终有时会引入标准 API,并在一段时间内保留自己的标准,我相信事件模型就是这种情况;例如,IE9 似乎同时支持addEventListener
and attachEvent
.
As to why我认为他们制定了自己的标准最佳答案在这里 https://softwareengineering.stackexchange.com/questions/184449/why-does-internet-explorer-have-so-many-incompatibilities-with-other-browsers是一个很好的解释。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)