11

我有一个输入文本框绑定到一个可观察的淘汰赛 js 。

<input id="searchTextBox" class="searchTextBox" type="text" maxlength="25"
       title="Search" placeholder="Search"
       data-bind="value: GridVm.FilterText,
       valueUpdate: 'afterkeydown',
       disable: GridVm.Data().length == 0" />

问题是当用户在 IE 中单击 x 时,FilterText observable 不会更新。

我发现我可以删除 x(请参阅链接问题中的屏幕截图),但这是最后的手段(我喜欢这个功能)。该论坛说单击 x 时不会触发任何事件

是否有一个事件可以用来强制 Knockout 可观察更新或在 Knockout 中执行此操作的好方法?

4

2 回答 2

12

如果你只是改变

valueUpdate: 'afterkeydown'

valueUpdate: 'input'

它挂钩该事件以触发值更新。总体而言它更好,因为它还处理基于剪贴板的操作和文本拖放操作。

于 2013-06-26T18:55:41.313 回答
5

我使用输入事件Knockout 的事件绑定解决了这个问题。这是我的 JsFiddle使用下面的代码显示解决方案。

<input type="search" id="input1" data-bind="value: textForBox, valueUpdate: 'afterkeydown',
  event: { input: cleared }" />
var vm = {
    textForBox: ko.observable(),
    cleared: function (data, event) {
        if (event.currentTarget.value === '') {
           this.textForBox('');
        }
    }
};
ko.applyBindings(vm);
于 2013-05-07T15:20:18.693 回答