我有一個使用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/)。 –