2015-04-29 95 views
2

我有一個使用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> 
+0

我不是100%確定這會解決你的問題,但你看[hasFocus](http://knockoutjs.com/documentation/hasfocus-binding.html)綁定?我從來沒有遇到過你的問題,但我們可能會從那裏開始,除非你想製作一個[JSFiddle](http://jsfiddle.net/)。 –

回答

2

textInput綁定是爲實時跨瀏覽器更新而設計的。這將用於你的用例。

valueUpdate: 'afterkeydown'"綁定可能在許多場景中失敗,如移動。

+0

很好,謝謝 – Stanley