knockoutJS, event is triggered, however event.which still undefined
knockout-2.0, knockout.js
Solution
Knockout passes the current data context as the first argument to a handler. The `event` is the second argument.
So, the signature for your function needs to be:
self.addOnEnter = function(data, event) {
}
Alternatively, a good way to handle this is through a custom binding like:
//a custom binding to handle the enter key (could go in a separate library)
ko.bindingHandlers.enterKey = {
init:function (element, valueAccessor, allBindingsAccessor, data, context) {
var wrappedHandler, newValueAccessor;
//wrap the handler with a check for the enter key
wrappedHandler = function (data, event) {
if (event.keyCode === 13) {
valueAccessor().call(this, data, event);
}
};
//create a valueAccessor with the options that we would want to pass to the event binding
newValueAccessor = function () {
return { keyup:wrappedHandler };
};
//call the real event binding's init function
ko.bindingHandlers.event.init(element, newValueAccessor, allBindingsAccessor, data, context);
}
};
Now you would just use this `enterKey` binding against your `addOnEnter` function and it woul d only need to deal with your data.
Problem
here's my code. ``` <input type="text" placeholder="Add New Tag" data-bind="value: tagToAdd, valueUpdate: 'afterkeydown', event: { keypress: addOnEnter }" /> ``` here's my knockout code. ``` self.addOnEnter = function (event) { console.log(event.which); var keyCode = (event.which ? event.which : event.keyCode); if (keyCode === 13) { self.addTag(); } return true; }; ``` when I type something in the input field, then I log the event, kept getting undefined back. I dont know why I cannot catch which event is fired. you can test my code on jsFiddle. http://jsfiddle.net/GBLNR/6/ just type anything in the input field, then watch the result from the console.