如何在Internet Explorer中按下Enter键后更新observable

时间:2016-04-06 15:50:45

标签: knockout.js data-binding typescript

HTML代码

<input type="text" data-bind="value: nextName">

可观察

nextName: KnockoutComputed<string>;
currentName: KnockoutObservable<string>;

constructor()
{
    this.nextName = ko.pureComputed(
    {
        read: () => this.currentName(),
        write: (value: string) =>
        {
           this.currentName(value);
           if ((value) && value.trim().length > 0)
              this.runSearch();
        }
    }, this);
}

用户按回车键后,搜索功能将在Chrome中正常执行,但不会在Internet Explorer中执行 我尝试使用valueUpdate:'afterkeydown'绑定,但这将在每个字符后执行搜索 - 这不是我想要实现的。

2 个答案:

答案 0 :(得分:1)

我使用了这种polyfill-根本问题是,按下Platform.runLater键时IE不会触发change事件。

Enter

答案 1 :(得分:0)

您可以使用textInput绑定并为custom Knockout binding创建enterkey来执行您想要的操作:
textInput提供viewmodel之间的双向更新1}} property和元素的值.it为autocompletedrag-and-dropclipboard事件提供实例更新。然后你可以使用enterkey绑定来在每次用户按下回车键时调用你的函数,这也应该在IE中工作。

 <input type="text" data-bind="textInput: nextName,enterkey: function() {runSearch()}">

自定义Knockout绑定:

ko.bindingHandlers.enterkey = {
    init: function (element, valueAccessor, allBindings, viewModel) {
        var callback = valueAccessor();
        $(element).keypress(function (event) {
            var keyCode = (event.which ? event.which : event.keyCode);
            if (keyCode === 13) {
                callback.call(viewModel);
                return false;
            }
            return true;
        });
    }
};

工作示例:http://jsfiddle.net/GSvnh/5124/