【发布时间】:2015-07-09 04:50:56
【问题描述】:
我有一个使用 knockout.js 的表单,其中用户可以输入值,然后单击按钮或按 Enter 将值应用于当前 VM。
当我在按 Enter 之前单击输入字段的按钮或制表符时,一切正常,但如果我按 Enter 而不从输入字段中制表符,我正在读取陈旧的值(或者如果字段没有,则没有值但失去焦点)。
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>
【问题讨论】:
标签: knockout.js