试图阻止kendoComboBox的箭头键输入

时间:2014-01-03 21:27:49

标签: javascript jquery kendo-ui keydown

我设置了kendoComboBox,我试图阻止箭头键发送输入。

在下面的示例中,如果我删除了对keyCode 38和40的检查,它们是向上和向下箭头,它将阻止所有字母数字输入但是我但是箭头键仍然会改变kendoComboBox的选择。

有任何建议或想法吗?

JS Bin

$(document).ready(function() {

$("#products").kendoComboBox({
    placeholder: "Select product",
    dataTextField: "ProductName",
    dataValueField: "ProductID",
    filter: "contains",
    autoBind: false,
    minLength: 1,
    dataSource: {
        type: "odata",
        serverFiltering: true,
        transport: {
            read: {
                url: "http://demos.kendoui.com/service/Northwind.svc/Products"
            }
        }
    }
});

// Stop up/down arrow input
$('#products').closest('.k-widget').keydown(function(e){

    console.log(e.keyCode);

    // Up/down arrow
    if(e.keyCode == 38 || e.keyCode == 40)
        e.preventDefault();
});

});

3 个答案:

答案 0 :(得分:2)

您尝试的内容无效,因为它不会影响组合框注册的事件处理程序。您可以简单地用不使用箭头键导航的处理程序替换该处理程序(尽管作为用户,我不得不问为什么要这样做):

kendo.ui.ComboBox.fn._keydown = function(e) {
    var that = this,
        key = e.keyCode;

    that._last = key;

    clearTimeout(that._typing);

    if (key !== kendo.keys.TAB &&
        key !== kendo.keys.DOWN &&
        key !== kendo.keys.UP) {
        that._search();
    }
};

(在第一次创建组合框之前在某处添加此代码)

Demo here

答案 1 :(得分:0)

You can capture the keydown event of all ComboBox controls using the following code:

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

This also works with the Kendo DropDownList - a widget that generally doesn't support the keypress events.

答案 2 :(得分:0)

您可能已经解决了问题,但是,我遇到了阻止Kendo NumericTextBox上的值更改的问题。我发现了一篇可能对您有帮助的文章:http://www.telerik.com/forums/is-there-an-easy-way-to-disable-the-spinners

最终为我工作的是取消绑定该输入的keydown事件。

请务必注意,在窗口小部件初始化之后,您需要取消绑定箭头的keydown事件...

我的代码很简单:

...InitializeWidgets();
   InitlializeEvents();

   $(numberQuestions).unbind("keydown");

您需要做的就是选择选择器,取消绑定keydown事件,它应该适合您!