1

我的Web應用程序的用戶界面大多是用優秀的Knockout.js構建的。它在IE7兼容模式下顯示IE8中的一些佈局錯誤。我曾嘗試加入meta標籤強制標準模式,像這樣:IE9兼容性視圖中的Knockout.js中的綁定錯誤

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

然而,在IE9在IE9的兼容性視圖(我必須承擔一些用戶已經設置),當淘汰賽做到這一點會導致錯誤其結合:

DOM異常:INVALID_CHARACTER_ERR(5)

我發現很多參考,以在網絡上這個錯誤 - 在其DOM元素創建的方式做的事情 - 但顯然我不是控制這個,Knockout是。

什麼是強制(或鼓勵)所有當前和未來版本的IE以標準模式呈現的強大且最低限度的黑客方式,這與Knockout.js如何構建DOM兼容?另外,任何人都可以詳細說明Knockout.js在這裏做什麼,哪個IE9不喜歡?非常感謝。

更新:

我在我的標記中至少隔離了一個問題。我有一對單選按鈕:

 <input type="radio" data-bind="checked: Gender, attr: { name: 'gender-' + ID() }" value="@((int)Sex.Male)" /> 
     <span>Male</span> 
     <input type="radio" data-bind="checked: Gender, attr: { name: 'gender-' + ID() }" value="@((int)Sex.Female)" /> 
     <span>Female</span> 

這對單選按鈕的名稱屬性是「性別」加當前綁定的視圖模型的ID生成,如我有多個實例深層次結構這一對單選按鈕。因爲我使用Knockout生成name屬性,所以我沒有在標記中對輸入進行指定 - 並且當我還添加手動名稱(如「joe」)時,它在瀏覽器模式下正確綁定:「IE9兼容性視圖」 。所以就好像在兼容模式下一樣,單選按鈕被IE認爲是無效的,因爲它沒有名稱屬性。但它在瀏覽器模式下工作:「IE9」。

此外,這與IE邊緣元標記無關,無論何時切換到兼容性視圖,它都會失敗 - 但我的下一個問題是,爲什麼沒有meta標記覆蓋瀏覽器設置?

回答

1

嘗試用引號包裝名稱屬性。

<input type="radio" data-bind="checked: Gender, attr: { 'name': 'gender-' + ID() }" value="@((int)Sex.Male)" /> 

查看回答詳情低於

+0

沒有運氣評論。我不認爲問題是Knockout沒有標識屬性名稱,我認爲這與IE9在兼容性視圖中構建DOM元素時認爲是有效的標記是一致的。 – 2012-07-29 20:23:29

+0

創建演示[jsfiddle](http://jsfiddle.net/JMsYP/)。在所有IE視圖模式下測試 - 無錯誤。也許與你試圖綁定的值有關的問題。你能否根據你的數據修改小提琴並重現錯誤? – vadim 2012-07-30 05:42:35

+0

抱歉延遲Vadim。看看這個修改的小提琴:http://jsfiddle.net/JMsYP/6/對於我來說,在Firefox和IE9不在兼容模式下,2對單選按鈕(每個人一個)正確渲染。但在IE瀏覽器切換到IE9兼容性視圖時,綁定失敗,並出現相同的錯誤(我提醒)。我已將每個單選按鈕的值更改爲1和2,以表示我的枚舉值,而不是0和1作爲布爾屬性。你有同樣的問題嗎?乾杯。 – 2012-08-08 21:02:12