7

长话短说,我想让用户在输入元素上按回车键,并在我的视图模型中调用某些方法。这是我的html输入:

<input id="searchBox" class="input-xxlarge" type="text" data-bind="value: searchText, valueUpdate: 'afterkeydown', event: { keypress: $parent.searchKeyboardCmd}">

这是我在vm中的方法:

searchKeyboardCmd = function (data, event) { if (event.keyCode == 13) searchCmd(); };

一切正常,searchCmd当我输入输入时调用,但问题是我不能在输入中输入任何内容,即我输入输入的所有内容都被忽略。预先感谢您的帮助。

4

3 回答 3

21

根据 KO 文档,true如果您希望继续执行默认操作,则必须从事件处理程序返回。

searchKeyboardCmd = function (data, event) {
    if (event.keyCode == 13) searchCmd();
    return true;
};
于 2013-04-20T14:52:36.627 回答
2

这是一个工作示例。

http://jsfiddle.net/tlarson/qG6yv/

<!-- ko with: stuff -->
  <input id="searchBox" class="input-xxlarge" type="text" 
    data-bind="value: searchText, valueUpdate: 'afterkeydown', 
    event: { keypress: $parent.searchKeyboardCmd}">   
<!-- /ko -->

和javascript:

var stuffvm = function(){
    var self = this;

    self.searchText = ko.observable();
};

var vm = function() {
    var self = this;

    self.stuff = new stuffvm();

    self.searchCmd = function() {
        console.log("search triggered");
    };

    self.searchKeyboardCmd = function (data, event) { 
        if (event.keyCode == 13) {
            self.searchCmd(); 
        }
        return true;
    }
}

ko.applyBindings(new vm());
于 2013-04-30T17:35:50.560 回答
2

这是一个小提琴,它演示了你试图做什么,并用 keyup 替换你的代码中的事件'keypress',并仅用函数名称删除 $parent,除非文本字段在淘汰赛 foreach 循环内..这是下面修改的代码

<input id="searchBox" class="input-xxlarge" type="text" data-bind="value: searchText, valueUpdate: 'afterkeydown', event: { keyup: searchKeyboardCmd}"
于 2013-04-20T16:13:02.147 回答