绑定输入使用knockout进入函数调用

时间:2014-03-06 19:43:17

标签: javascript knockout.js

当我按Enter键并使用元素中的值时,我正试图让input元素调用一个函数:

<input id="searchQuery" placeholder="Search..." type="text" data-bind="value: searchQuery, valueUpdate: 'onkeydown', event: { keydown: searchQueryEntered }"/>  

功能:

searchQueryEntered = function (value, event) {
    if (event.keyCode == 13)
       ...do some stuff...
},

我的函数会被调用,但searchQuery永远不会更新!我甚至无法在input中输入任何内容。不知怎的,它被抛出了。我想要做的事情对我来说似乎很简单,但我无法做到正确。

2 个答案:

答案 0 :(得分:0)

要修复输入,您需要从keydown处理程序返回true:

    searchQueryEntered = function (value, event) {
        if (event.keyCode == 13) {
           ...do some stuff...
        }
        return true;
    }

然后你应该使用valueUpdate:'afterkeydown'来让你的模型在每次keydown之后更新。

查看此工作示例:http://jsfiddle.net/tabalinas/h4u8E/

答案 1 :(得分:0)

为enter键注册bindinghandler

ko.bindingHandlers.onEnterKey = {
    init: function(element, valueAccessor, allBindings, vm) {
        ko.utils.registerEventHandler(element, "keyup", function(event) {
            if (event.keyCode === 13) {
                ko.utils.triggerEvent(element, "change");
                valueAccessor().call(vm, vm);
            }

            return true;
        });
    }         
};

然后您可以绑定为onEnterKey: searchQueryEntered

见下面的小提琴 http://jsfiddle.net/NccZ8/2/