【问题标题】:How to select menu item programmatically in Kendo menu如何在 Kendo 菜单中以编程方式选择菜单项
【发布时间】:2015-02-20 15:54:44
【问题描述】:

我有一个带有值的菜单,我想添加一个可以选择该项目的快捷键。

我可以证明 in this fiddle 正是我在寻找的东西

function onSelect(e) {
    var item = $(e.item),
        menuElement = item.closest(".k-menu"),
        dataItem = this.options.dataSource,
        index = item.parentsUntil(menuElement, ".k-item").map(function () {
            return $(this).index();
        }).get().reverse();

    index.push(item.index());

    for (var i = -1, len = index.length; ++i < len;) {
        dataItem = dataItem[index[i]];
        dataItem = i < len-1 ? dataItem.items : dataItem;
    }

    alert(dataItem.value);
}

$(document).ready(function() {

    $("#menu").kendoMenu({
        dataSource: [
            {
                text: "Item 1 (A)",
                value: "A",
                items: [
                    {
                        text: "Sub Item 1 (L)",
                        value: "L",
                        items: [
                            {
                                text: "Sub Sub Item 1 (D)",
                                value: "D"
                            },
                            {
                                text: "Sub Sub Item 2 (E)",
                                 value: "E"
                            }
                         ]
                    },
                    {
                        text: "Sub Item 2 (O)",
                        value: "O"
                    }
                ]
            },
            {
                text: "Item 2 (F)",
                value: "F"
            },
            {
                text: "Item 3 (G)",
                value: "G"
            }
        ],
        select: onSelect
    });

    $(document.body).keydown(function (e) {
            var menu = $("#menu").kendoMenu().data("kendoMenu");
            if (e.altKey && e.keyCode == 76) {
                alert("select item with value L");
                // Pseudocode:
                // var item = find item with value L
                // menu.select(item); (or trigger)
            }
        }); 
});

我在任何地方都找不到任何资源可以做到这一点。此外,我无法通过数据源将 id 分配给呈现的“li”,这使得选择菜单节点变得困难。

有什么想法吗?

【问题讨论】:

  • 你能在你的项目中使用更多实际版本的剑道,而不是你的小提琴(v. 2011.3.1129)。我可以在 2012 Q3 SP1 或更高版本中为您提供帮助。

标签: kendo-ui onkeydown kendo-menu


【解决方案1】:

不确定 Kendo API 是否支持触发选择项,但我能够使用 JQuery 实现通过键盘快捷键单击菜单项。

查看JSFiddle

function clickMenuSpan(keyCode){
    var shortcut = String.fromCharCode(keyCode);

    $('#menu span.k-link').each(function(){
        var txt = $(this).text();

        if(txt.substr(-3) === '(' + shortcut + ')')
        {
            $(this).click();
        }

    })
}

您可以在 keydown 事件中使用上述功能。并添加一些过滤器以仅针对您的快捷方式数组调用它。

 $(document.body).keydown(function (e) {
        var menu = $("#menu").kendoMenu().data("kendoMenu");
        if (e.altKey) {

            clickMenuSpan(e.keyCode);
        }
    });

【讨论】:

  • 嘿,谢谢。我用另一种方法去了。我提取了一个数组中的所有事件并使用了它的索引,这意味着我不再需要加载菜单。但这看起来也不错
最近更新 更多