knockout catch enter key press

by sderico

HTML

<script src="http://knockoutjs.com/downloads/knockout-2.2.0.js"></script>
<ul data-bind="foreach: items">
  <li>
<input data-bind="value: name, valueUpdate: 'afterkeyup', returnAction: $root.sendMessage" />
  </li>
</ul>

JavaScript

ko.bindingHandlers.returnAction = {
  init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
    var value = ko.utils.unwrapObservable(valueAccessor());
    
    $(element).keydown(function(e) {
      if (e.which === 13) {
        value(viewModel);
      }
    });
  }
};

var ChildViewModel = function(name) {
  this.name = ko.observable(name);
},
  MainViewModel = function() {
    var self = this;
    self.sendMessage = function(data) {
      //put real implementation here
      alert(data.name());
    };
    self.items = ko.observableArray([
      new ChildViewModel("one"),
      new ChildViewModel("two"),
      new ChildViewModel("three")]);
  };

ko.applyBindings(new MainViewModel());