繁体   English   中英

Javascript-事件属性的浏览器命名约定使我感到困惑

[英]Javascript - Browser naming conventions for event attributes confusing me

我一直想知道为什么不同浏览器的JavaScript中事件的target / sourceElement的属性名称有所不同。

event.srcElement in Internet Explorer
event.target in most other browsers.

Internet Explorer众所周知是一种反叛的浏览器,尤其是在早期版本中,它以其自己的标准与Web API兼容。

尽管它为此受到了严厉批评, 但我们也应该对此表示感谢 ,因为它的反叛帮助引入了一些后来成为标准的功能,例如innerHTML和AJAX请求。

在这种特定情况下,约定的差异会出现,因为较旧版本的IE使用的事件模型与其他浏览器使用的标准模型不同。 随之而来的是一系列不同名称的对象。 MDN

在IE6-8上,事件模型有所不同。 事件侦听器附带有非标准的element.attachEvent()方法。 在此模型中,事件对象具有srcElement属性而不是target属性,并且其语义与event.target相同。

Internet Explorer在较新的版本中开始更全面地遵循标准,例如, IE11中完全弃用了 attachEvent

同样的事情也发生在其他一些东西上,因此,如果要支持IE的较早版本,为什么必须使用具有某些功能的后备。

至于为什么他们不在Internet Explorer中添加别名? 好吧,他们最终有时会引入标准API并保留自己的标准一段时间,我相信事件模型就是这种情况。 例如,似乎IE9同时支持addEventListenerattachEvent

至于为什么他们要制定自己的标准,我认为这里的最佳答案是一个很好的解释。

每次加载网页时,浏览器都会将代码转换为计算机可以理解的可用格式。 但是,不同的浏览器的执行方式略有不同,因此有时需要为某些浏览器设置例外。

浏览器是翻译器,有时翻译可能会有所不同,具体取决于谁进行翻译。

在这种特定情况下,我猜想Internet Explorer可以理解srcElement,而其他所有对象都可以理解目标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM