在淘汰赛中没有调用自定义绑定

时间:2015-08-09 21:50:51

标签: javascript knockout.js

我正在学习一些教程并尝试学习knockout.js。 我无法调用自定义绑定。

我的自定义绑定JS代码:

/// <reference path="knockout-3.3.0.debug.js" />
/// <reference path="jquery-1.10.2.min.js" />
/// <reference path="jquery-ui-1.11.4.min.js" />

ko.bindingHandlers.executeOnEnter = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        var allBindings = allBindingsAccessor();
        $(element).keypress(function (data, event) {
            var keyCode = (event.which ? event.which : event.keyCode);
            if (keyCode === 13) {
                allBindings.executeOnEnter.call(viewModel);
                return false;
            }
            return true;
        });
    }
};

我使用以下代码绑定它:

 <input type="text" data-bind="executeOnEnter: addData" />

然而,没有任何反应。即使在自定义绑定函数上设置了alert,也没有任何事情发生,这绝对意味着,它不会被调用。

1 个答案:

答案 0 :(得分:0)

这是一个有效的版本,

ko.bindingHandlers.executeOnEnter = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        var allBindings = allBindingsAccessor();
        $(element).keypress(function (event) {
            if (event.keyCode === 13) {
                allBindings.executeOnEnter.call(viewModel);
                return false;
            }
            return true;
        });
    }
};

我删除了以下行以使其适合您。

var keyCode = (event.which ? event.which : event.keyCode);

然后将keyCode替换为event.keyCode

由于

self.CallAlert = function () {
    alert('Alert called!');
};

<input type="text" data-bind="executeOnEnter: CallAlert" class="form-control"/>