2015-02-05 27 views
4

在Internet Explorer 10,我有以下幾點:無效的調用對象,兼容性

/* 
    * Alias document.getElementById(), to reduce typing, improve 
    * readability and speed up access to the function. 
    */ 
    var getElmById = document.getElementById; 

    function . . . (ctlID) { 
     var ctrl = getElmById(ctlID); // <————<<< error raised here 
     . . . 
    } 

這一直工作正常,但突然是給我

SCRIPT65535: Invalid calling object

我已經確定如果我選中框Tools > Compatibility View Settings > [_] Display intranet sites in Compatibility View,別名功能運行得很好,但是如果我清除該框,則會出現錯誤。

是什麼原因? IE正在響應的具體問題是什麼?像這樣的混疊功能被消除了嗎? 「文檔」對象的行爲方式是否有所改變?

+0

這個主題有一個優秀的解釋: http://stackoverflow.com/questions/1007340/javascript-function -aliasing-doesnt-scost-to-work – 2015-02-05 19:24:37

回答

0

「getElementById()」應該被稱爲方法而不是一個函數,也就是說,一個上下文被應用於(文檔,或者用Javascript來表示,「this」值),通過解析表達式(「document。」)的左側獲得。

在過去,上下文必須作爲函數的一個自由變量來訪問,所以他們可能決定清理它們的代碼。由於其他一些主流瀏覽器不支持這種別名,我想他們會認爲大多數人不會介意。

+0

我相信這是不正確的。它是一個函數,因爲它返回被引用的元素。 – 2015-02-05 19:22:44

+0

你好。我不確定我會關注你,對不起。 getElementById的本質是一個函數,當然(它不是一個字符串或數字)。但是,根據W3 ​​DOM Core Level 2規範,它是Document接口的成員,這意味着它應該針對Document實例進行調用。換句話說,你的別名只能在當前窗口中工作,但不可用,你想從另一個文檔中檢索一個元素(比如在iframe中)。 – Elegie 2015-02-05 19:54:12

相關問題