簡體   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