这是我的代码。
<input type="text" placeholder="Add New Tag" data-bind="value: tagToAdd, valueUpdate: 'afterkeydown', event: { keypress: addOnEnter }" />
这是我的 knockout 代码。
self.addOnEnter = function (event) {
console.log(event.which);
var keyCode = (event.which ? event.which : event.keyCode);
if (keyCode === 13) {
self.addTag();
}
return true;
};
当我在输入字段中输入内容时,我会记录该事件,但一直返回 undefined。我不知道为什么我无法捕获触发的事件。
您可以在 jsFiddle 上测试我的代码。 http://jsfiddle.net/GBLNR/6/
只需在输入字段中输入任何内容,然后从控制台查看结果。
最佳答案
Knockout 将当前数据上下文作为第一个参数传递给处理程序。 事件
是第二个参数。
因此,您的函数的签名需要是:
self.addOnEnter = function(data, event) {
}
或者,处理此问题的一个好方法是通过自定义绑定(bind),例如:
//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);
}
};
现在您只需对您的 addOnEnter
函数使用此 enterKey
绑定(bind),它只需要处理您的数据。
关于knockout.js - knockoutJS,事件被触发,但是 event.which 仍然未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13150586/