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

标签 knockout.js knockout-2.0

这是我的代码。

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

相关文章:

javascript - Knockout.js 文本将多个属性绑定(bind)到单个 <p> 节点

knockout.js - 敲: Is it bad form to iterate through observable arrays with ko utility methods?

javascript - Knockoutjs 和动态更改模板

javascript - 使可观察变量为空

knockout.js - 将 Handlebars.js 预编译模板与 KnockoutJS 结合使用

jquery - 获取关联 ViewModel 的 DOMElement 的简单方法 (KnockoutJS)

javascript - Knockout.js 使用拦截器扩展值绑定(bind)

knockout.js - 自定义错误消息和位置

javascript - 在 Mac 中学习 javascript 的简单环境设置是什么

javascript - knockout JS : Sorting and splicing an observable array of observable numbers