Internet explorer 排除IE8兼容性问题

Internet explorer 排除IE8兼容性问题,internet-explorer,knockout.js,ie8-compatibility-mode,Internet Explorer,Knockout.js,Ie8 Compatibility Mode,在使用IE8兼容模式运行IE9时,我遇到了敲除的严重问题。 问题是: 我有一个动态生成的文本框数组,一个更改事件绑定到这些元素。当更改事件出现时,在IE8兼容模式下,我需要按tab键两次以离开控件。这在Firefox中不会发生,也不会在没有事件绑定的情况下发生 我不确定这是否与我的活动有关,因此我在此处发布代码: <tbody data-bind="foreach: DailyItemList"> <tr>

在使用IE8兼容模式运行IE9时,我遇到了敲除的严重问题。 问题是:

我有一个动态生成的文本框数组,一个更改事件绑定到这些元素。当更改事件出现时,在IE8兼容模式下,我需要按tab键两次以离开控件。这在Firefox中不会发生,也不会在没有事件绑定的情况下发生

我不确定这是否与我的活动有关,因此我在此处发布代码:

  <tbody data-bind="foreach: DailyItemList">
                            <tr>
                                <td>
                                 <span  data-bind="text:Day"></span>

                                </td>
                                <td><input id="Text2" data-bind="value: Required"/></td>
                                <td><input id="Text3" data-bind="value: Setup, event:{change: ValidateSetup}"/></td>
                                <td><input id="Text4" data-bind="value: Close, event:{change: ValidateClose}"/></td>
  </tr>
  </tbody>

如果您想解决IE8兼容性问题,那么可以从
验证
函数返回
true

this.ValidateSetup = function () {
    if (this.Setup() > 30) {
        alert('Invalid SetupTime');
    }

    return true;
}
下面是一个示例:(JSFIDLE在IE8模式下本身存在一些问题,因此您可以运行)

不过,一个更好的方法可能是使用。这是一个很好的选项,用于在单个可观察对象发生更改时执行代码。同样可以在
计算的
中完成,这允许您依赖多个观测值

使用手动订阅,您可以执行以下操作:

<input id="Text3" data-bind="value: Setup"/>

不要做任何改变。使ValidateSetup成为访问输入值的计算程序。删除事件:{更改,您就可以开始了。您好,谢谢您的回复,但是我需要在函数内部做一些事情-我所展示的只是一个示例。我需要更新函数内部的其他几个观察值。您仍然可以在计算内部做。但是如果您不想要计算的,请订阅基础观察值并执行您需要的操作d要做。谢谢,我用return语句得到了这个结果。正如您所说,手动订阅可能是最好的选择,但我现在不想使用它,因为有很多代码需要更改。这是一个很大的页面。再次感谢您的帮助:)
<input id="Text3" data-bind="value: Setup"/>
this.Close = ko.observable(data.CloseTime);
this.Close.subscribe(function(newValue) {
    if (newValue > 30) {
        alert('Invalid SetupTime');
    }

    //set other observables, or do whatever you like. "this" will be the this object.

}, this);