2

我试图让 KendoUI 多选下拉菜单在用户选择此小部件时自动打开。我可以通过控制台触发打开事件

var widget = $("#MyWidget").data("kendoMultiSelect");
widget.focus();
widget.open();

当焦点位于 KendoUI 多选小部件上时,我想自动执行此操作,因为用户点击它。

我的设置:对 Multiselect 和 IE9 使用 KendoUI MVC Wrapper

我尝试使用传递给小部件的名称附加焦点侦听器,即

$("#MyWidget").on('focus',function(e){
    alert("hi");
});

我无法以这种方式检测到焦点事件。任何帮助/指针将不胜感激!

4

1 回答 1

2

当用户进入该字段时,我能够触发 KendoUI 多选的打开事件!:) 我向窗口对象添加了一个 keyup 侦听器,并且能够挑选出我感兴趣的元素。它不是很有效,但它有效,我欢迎对其进行改进。

$(document).ready(function () {
    $(window).on('keyup', function (e) {
        var code = (e.keyCode ? e.keyCode : e.which);
        if (code == 9) {
            //get element in focus
            var item_name = e.target.name;
            //get element in focus
            var focused_element = $(document.activeElement);
            //console.log(focused_element);
            var nextSib = focused_element[0].nextElementSibling;
            if (nextSib && nextSib.parentElement && nextSib.parentElement.nextElementSibling) {
                var select_element = nextSib.parentElement.nextElementSibling;
                //item_name will hold the name of the widget i.e. the value of the input field
                //.Name("myWidgetName")
                item_name = select_element.id;
                var obj_select = '#' + item_name;
                //true for multiselect widget
                if (select_element.type == 'select-multiple') {
                    var obj_selector = $(obj_select).data("kendoMultiSelect");
                    if (obj_selector) {
                        obj_selector.focus();
                        obj_selector.open();
                    }                    
                }else if (select_element.type == 'text'){
                    //true for combobox widget
                    var obj_selector = $(obj_select).data("kendoComboBox");
                    if (obj_selector){
                        obj_selector.open();
                    }
                }
            }
        }
    });
});
于 2014-07-01T22:31:34.490 回答