【问题标题】:read uncommited input in Knockout.js enter handler在 Knockout.js 中读取未提交的输入进入处理程序
【发布时间】: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>

【问题讨论】:

  • 我不是 100% 确定这会解决您的问题,但是您是否查看了 hasFocus 绑定?我从来没有遇到过你的问题,但我们可以从那里开始,除非你想创建一个JSFiddle

标签: knockout.js


【解决方案1】:

textInput 绑定是为实时跨浏览器更新而设计的。这将为您的用例服务。

valueUpdate: 'afterkeydown'" 绑定在许多情况下可能会失败,例如移动设备。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 2012-01-28
    • 2016-07-01
    • 2021-08-13
    相关资源
    最近更新 更多