6

我的页面中有一个 ComboBox,当客户写下任何字母时,我想将按键事件绑定到我的 Kendo ComboBox。

据我了解,剑道在 ComboBox 上没有任何按键事件。

我发现剑道有这样的东西来绑定值和函数:

kendo.data.binders.slide = kendo.data.Binder.extend({
        refresh: function () {
            var value = this.bindings["slide"].get();

            if (value) {
                $(this.element).slideDown();
            } else {
                $(this.element).slideUp();
            }
        }
    });

来源:点击这里

但问题是我无法解决这个问题并使其触发 KendoComboBox 控件中 InputBox 上的按键事件。

请记住,我正在使用 MVVM,我不想使用像 $('k-input').keypress(...); 这样的东西。我想通过操作 kendo 为我们提供的 extend 方法在我的 kendo 框架中添加一些东西。

先感谢您。

4

2 回答 2

13

这个比我想象的要复杂,但是您可以通过制作自定义 MVVM 绑定器来附加到元素的keyPress事件来处理这个问题,如下所示:input

kendo.data.binders.widget.keyPress = kendo.data.Binder.extend({
    init: function (element, bindings, options) {
        kendo.data.Binder.fn.init.call(this, element, bindings, options);
        var binding = this.bindings.keyPress;
        $(element.input).bind("keypress", function(){binding.get();});
    },
    refresh: function () {}
});

您可以将其绑定到视图模型上的函数。

<input data-role="combobox"
    data-text-field="text"
    data-value-field="value"
    data-bind="keyPress: onKeyPress, source: data"></input>


var viewModel = kendo.observable({
    data: [
        {text: "One", value: 1},
        {text: "Two", value: 2}
    ],
    onKeyPress: function () {
        $("#output").append("<div>keyPress</div>");
    }
});

这是一个工作 jsFiddle

于 2013-01-27T17:14:50.260 回答
0

您可以使用以下代码捕获所有 ComboBox 控件的 keydown 事件:

kendo.ui.ComboBox.fn._keydown = function(e) {
    if (e.which == 13) {
        alert("key pressed!");
    }
};

这也适用于通常不支持按键事件的 DropDownList 小部件。

于 2015-07-28T16:15:30.783 回答