2014-02-05 60 views
0

当我有输入和按钮时,我有页面。覆盖输入时更新值按

<div> 
    <div class="input-group"> 
     <span class="input-group-addon">Enter test</span> 
     <input type="Text" class="form-control" data-bind="value:Test, event: { keypress: searchKeyboardCmd}" required /> 
    </div> 
</div> 
<button data-bind=' event:{click:foo}' class="btn btn-default">Submit</button> 

和我的代码:

var ViewModel = function() { 
    var self = this; 
    self.Test = ko.observable(); 
    self.data = ko.observableArray([]); 
    self.DeviceId = ko.observable(); 
    self.number = ko.observable(1); 
    self.MeUser = ko.observable(true); 
    self.searchKeyboardCmd = function (data, event) { 
     if (event.keyCode == 13) 
      alert("Znalazlem enter " + ko.toJSON(self)); 
     return true; 
    }; 
    self.foo = function() { 
     alert("foo"); 
    }   
}; 
ko.applyBindings(new ViewModel()); 

});

我的代码有问题。我用这个代码捕获输入:

 self.searchKeyboardCmd = function (data, event) { 
     if (event.keyCode == 13) 
      alert("Znalazlem enter " + ko.toJSON(self)); 
     return true; 
    }; 

它完美地捕获,但绑定的对象在调用alert后更新。所以在第一次输入值为Test时为null。第二次输入后,我有第一个值,等等。任何人都可以建议我如何修改此代码?

回答

1

的问题是,该事件是blur事件之前执行(也就是当值更新您可以通过添加valueupdate: 'afterkeydown'到输入确保更新被每一次击键后更新:

<div> 
    <div class="input-group"> 
     <span class="input-group-addon">Enter test</span> 
     <input type="Text" class="form-control" 
       data-bind="valueUpdate: 'afterkeydown', value:Test, event: { keypress: searchKeyboardCmd}" required /> 
    </div> 
</div> 
<button data-bind=' event:{click:foo}' class="btn btn-default">Submit</button>