2012-09-05 115 views
1

這是一個簡單的應用程序模擬聊天。我公司提供的jsfiddle:knockoutjs foreach無法在IE 9中工作

http://jsfiddle.net/LkqTU/2785/

從服務器,通過按鈕進行模擬,並綁定到按鍵事件讓德回車鍵和發送消息的文本區域用戶打字來的一些消息。

那麼,這在Chrome和Firefox中運行良好,但在IE9中失敗。

什麼可能是錯的?

感謝

+0

不應該這行'self = this;'實際上'var self = this;'?有了這個更新,它不會在IE9中顯示任何錯誤。 – raina77ow

+0

噢,我的天啊..太傻了..謝謝! –

+0

不客氣,很高興提供幫助。 )我應該做出答案嗎? ) – raina77ow

回答

2

嗯,這是比較容易找到的錯誤:分配this到右模型函數的開頭命名爲self只是看起來不正確的外部變量。

爲什麼它在Chrome和Firefox的罰款,但在IE失敗的解釋,不過,更有意思。顯然varless selfwindow.self,這實際上是window對象的特殊屬性 - 參考...... window本身(MDN)。

的Internet Explorer實際上是它的這個屬性的特殊治療衆所周知:而在其他瀏覽器window === window.self評估爲true,在IE它的false。我不會說IE沒有任何推理,有關詳細信息,請檢查此discussion。諷刺的是,在這個特殊的例子中,IE變成了一個半英雄。 )我說「英雄」,因爲IE是唯一不讓你覆蓋window.self的瀏覽器。其他人都不那麼挑剔;將console.log(window.self)添加到您的腳本結尾以見證他們的恥辱。 )

我說的「半壁江山」,是因爲IE可能會更加...英雄了。 )而不是默默地忽略window.self = ...行(並且爲那些使用了略有不同的忽略賦值的很遠的行拋出錯誤),爲什麼IE沒有提供預警?該死的,即使是通知也會。

無論如何。不要依賴IE的零星英雄主義來完成這樣的事情:只需在開頭添加'use strict'行腳本,瞧! Chrome和Firefox都將在其所屬的位置上發出「參考錯誤」警告 - 位於self = this行。 )

是的,我明白,「使用嚴格」的使用是不是簡單的一步,它可能會打破一些腳本;但我完全支持尼古拉斯扎卡斯'statement關於該主題