【问题标题】:Binding error in Knockout.js in IE9 Compatibility ViewIE9 兼容性视图中 Knockout.js 中的绑定错误
【发布时间】:2012-07-11 23:16:09
【问题描述】:

我的网络应用程序的 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 以标准模式呈现,并且与 Knockout.js 构建 DOM 的方式兼容的健壮且最低限度的 hacky 方式?另外,任何人都可以详细说明 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>

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

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

【问题讨论】:

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


    【解决方案1】:

    尝试将 name 属性用引号括起来。

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

    在下面的 cmets 查看答案详情

    【讨论】:

    • 不走运。我认为问题不在于 Knockout 没有识别属性名称,我认为这与 IE9 在兼容性视图中认为构建 DOM 元素时的有效标记有关。
    • 创建了演示 [jsfiddle](jsfiddle.net/JMsYP)。在所有 IE 视图模式下测试 - 没有错误。可能是您尝试绑定的值的问题。你能根据你的数据修改fiddle并重现错误吗?
    • 抱歉耽搁了瓦迪姆。看看这个修改过的小提琴:jsfiddle.net/JMsYP/6 对我来说,在 Firefox 和 IE9 不兼容模式下,2 对单选按钮(每个人一个)正确呈现。但是在 IE 中,当我切换到 IE9 兼容性视图时,绑定失败并出现相同的错误(我正在警告)。我已将每个单选按钮的值更改为 1 和 2,以表示我的枚举值,而不是布尔属性的 0 和 1。你有同样的问题吗?干杯。
    • 我遇到了同样的问题。问题出在 IE API 中。 document.createElement 不能接受 html 作为参数,只标记其他浏览器是否可以通过 html 创建。当您想生成名称属性敲除尝试使用具有已定义名称的 html 代码创建元素时,该名称在兼容模式下不能用于 IE。作为解决方法,您可以在使用敲除绑定之前为收音机定义名称。
    • 有趣。你是对的,当我添加 name="temp" 然后它被 Knockout 替换时它会起作用:jsfiddle.net/JMsYP/9 这是一个不幸的黑客,但对于那些使用 IE 的穷人,我可能需要使用它。非常感谢!
    猜你喜欢
    • 2012-03-03
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 2012-07-16
    相关资源
    最近更新 更多