我有一个使用knockout.js的表单,其中use可以输入值,然后单击按钮或按Enter键将值应用于当前VM。
当我按下输入之前单击输入字段的按钮或标签时,一切正常,但是如果我按下输入而没有选择输入字段,我正在读取陈旧值(如果字段没有,则没有值然而失去了焦点)。
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键时按下输入字段或以任何其他方式读取最新值时将输入字段强制为databind?
更新:我发现使用&#34; valueUpdate:&#39; afterkeydown&#39;&#34;它的工作原理是它用每个按键更新observable,如果输入了大量数据,这似乎效率低下,但对我的情况来说已经足够了。
<td><input type="text" placeholder="Start" data-bind="value: InputStart, valueUpdate:'afterkeydown', event: { keypress: $parent.triggerApplyInputByEnter }" /></td>