我在类型搜索的输入上有一个事件绑定,这是为了将搜索发送到服务器端并在用户输入时填充列表。
这部分很好,我已经建立了一个使用纯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
函数之外没有任何事情发生。
答案 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会这样做,当你用锚点和点击来思考时,这是有道理的。