gpt4 book ai didi

knockout.js - knockoutJS,事件被触发,但是 event.which 仍然未定义

转载 作者:行者123 更新时间:2023-12-01 12:50:05 24 4
gpt4 key购买 nike

这是我的代码。

    <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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com