0

在 IE9 上以 IE8 兼容模式运行时,我遇到了严重的淘汰问题。这是问题:

我有一个动态生成的文本框数组,并且更改事件绑定到这些元素。当更改事件存在时,在 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>

这是具有更改功能的视图模型:

var DailyItem = function (data) {
this.Day = ko.observable(data.DayOfWeek);
this.Required = ko.observable(data.Required);
this.Setup = ko.observable(data.SetupTime);
this.Close = ko.observable(data.CloseTime);
this.ValidateSetup = function () {
    if (this.Setup() > 30) {
        alert('Invalid SetupTime');
    }
}
this.ValidateClose = function () {
    if (this.Close() > 30) {
         alert('Invalid SetupTime');
    }
}
}

function ViewModel(items) {
   this.DailyItemList = ko.observableArray([]);
   records = $.map(items, function (data) { return new DailyItem(data) });
   this.DailyItemList(records);
}
4

1 回答 1

2

如果你想解决 IE8 兼容性问题,那么你可以true从你的Validate函数中返回。

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

    return true;
}

这是一个示例: http: //jsfiddle.net/rniemeyer/FfNqv/(jsFiddle 在 IE8 模式下本身存在一些问题,因此您可以运行http://jsfiddle.net/rniemeyer/FfNqv/show/

更好的方法可能是使用手动订阅。当单个可观察对象发生更改时,这是执行代码的好选择。同样可以在 a 中完成computed,它允许你依赖多个 observables。

通过手动订阅,您可以:

<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);
于 2013-05-06T15:03:27.723 回答