输入

时间:2015-05-13 16:50:33

标签: javascript html knockout.js data-binding

我在类型搜索的输入上有一个事件绑定,这是为了将搜索发送到服务器端并在用户输入时填充列表。

这部分很好,我已经建立了一个使用纯javascript的骨架示例,当需要整合到淘汰赛时,我遇到了一个奇怪的问题。

我的HTML中有标准绑定:

<input data-bind="event:{keypress:ring}" type="text" />

对于这个例子,当按下键时,我的铃声功能将简单地记录一下:

ring: function (event) {
            this.triggered(this.triggered() + 1);
            var msg = "Keypress binding called " + this.triggered() + " time(s).";
                    console.log(msg);
                } 

那是正常的,没有问题..

问题是输入值/字符串没有被更新..它只是保持空白,好像我没有按任何东西。

我很好奇我错过了某种我应该做的默认转发吗?这是预期的行为吗?对我来说似乎有点奇怪。

这里有一个工作示例:JSfiddle

当您输入输入时,除了我的ring函数之外没有任何事情发生。

1 个答案:

答案 0 :(得分:2)

您需要从事件处理函数返回true,以允许在输入上执行默认操作。

在这里演示:http://jsfiddle.net/szcuyq13/1/

    ring: function (event) {
        this.triggered(this.triggered() + 1);
        var msg = "Keypress binding called " + this.triggered() + " time(s).";
        console.log(msg);
        return true;
    } 

换句话说,这正如您所猜测的那样:您只需添加一点点以确保“默认转发”按预期发生。默认情况下,KO会阻止绑定事件处理程序中的默认操作,如果返回true,则表示您正在请求完成默认操作。这里描述了标题注3:

http://knockoutjs.com/documentation/event-binding.html

这个说明也解释了为什么KO会这样做,当你用锚点和点击来思考时,这是有道理的。