我有一个使用knockout.js的表单,其中用户可以输入值,然后单击按钮或按回车以将值应用于当前虚拟机。在Knockout.js中输入未知输入输入处理程序
一切正常,当我点击输入字段的按钮或标签之前,我按下输入,但如果我按下输入没有标签输入字段,我正在阅读过时值(或没有值,如果字段有还没有失去焦点)。
self.triggerApplyInputByEnter = function (data, event) {
if (event.keyCode === 13) {
self.ApplyInput();
return false;
}
return true;
}
标记:
<table>
<tbody data-bind="foreach: Inputs">
<tr>
<td><input type="text" placeholder="Start" data-bind="value: InputStart, event: { keypress: $parent.triggerApplyInputByEnter }" /></td>
<td><input type="text" placeholder="End" data-bind="value: InputEnd, event: { keypress: $parent.triggerApplyInputByEnter }" /></td>
</tr>
</tbody>
</table>
</td>
<td>
<a href="#" title="" data-bind="click: ApplyInput" ><span>Apply Input</span></a>
</td>
我的直觉是,不被更新了我的观测绑定到我的输入字段,直到输入字段失去焦点。任何有关如何读取按键处理程序中未提交值的指导,或者当我按Enter键时按Enter或以任何其他方式读取最新值时强制输入字段为数据绑定?我发现使用“valueUpdate:'afterkeydown'”的作用在于它使用每个按键都更新了observable,如果输入大量数据,这看起来效率不高,但对于我的情况来说已经足够好了。
<td><input type="text" placeholder="Start" data-bind="value: InputStart, valueUpdate:'afterkeydown', event: { keypress: $parent.triggerApplyInputByEnter }" /></td>
我不是100%确定这会解决你的问题,但你看[hasFocus](http://knockoutjs.com/documentation/hasfocus-binding.html)绑定?我从来没有遇到过你的问题,但我们可能会从那里开始,除非你想制作一个[JSFiddle](http://jsfiddle.net/)。 –