IE9兼容性视图中Knockout.js中的绑定错误

时间:2012-07-11 23:16:10

标签: internet-explorer dom knockout.js ie8-compatibility-mode

我的网络应用程序的UI主要是使用优秀的Knockout.js构建的。它在IE7兼容模式下显示IE8中的一些布局错误。我试过添加一个元标记来强制标准模式,如下所示:

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

然而,在IE9兼容性视图下的IE9中(我必须假设某些用户已设置),这会在Knockout进行绑定时导致错误:

DOM异常:INVALID_CHARACTER_ERR(5)

我在网上发现了很多关于这个错误的引用 - 与DOM元素的创建方式有关 - 但显然我没有控制它,Knockout就是。

强制(或鼓励)IE的所有当前版本和未来版本在标准模式下呈现的强大而简单的hacky方式是什么,这也与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>

这对单选按钮的name属性生成为“gender-”加上当前绑定视图模型的ID,因为我有一个深层次结构,其中包含这对单选按钮的多个实例。因为我使用Knockout生成name属性,所以我没有根据标记中的输入指定它 - 当我还添加一个手动名称,如“joe”时,这在浏览器模式下正确绑定:“IE9兼容性视图” 。因此,就像在兼容模式下,单选按钮被IE视为无效,因为它没有名称属性。但它在浏览器模式下工作:“IE9”。

此外,这与IE边缘元标记无关,无论何时切换到兼容性视图,它都会失败 - 但我的下一个问题是,为什么该元标记不会覆盖浏览器设置?

1 个答案:

答案 0 :(得分:1)

尝试用引号包装name属性。

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

在下面的评论中查看答案详情