在某些按键时清除所选的下拉值

时间:2016-07-18 07:21:23

标签: jsf primefaces

我想出了PF的selectonemenu组件的奇怪行为。当我从下拉列表中选择一个值并按下以下某个键时(当焦点在下拉列表上时):PrtScr,Insert,Caps Lock,Num Lock,Scroll Lock,大多数功能键,......清除下拉值(并更改'更改'事件被调用)。

为什么会发生这种情况以及如何摆脱键绑定'?

编辑:

在PrimeFaces源代码中找到了一些执行键绑定的JS代码(见下文),我想这是导致下拉值被清除的代码。

bindKeyEvents: function() {
    var a = this;
    this.focusInput.on("keydown.ui-selectonemenu", function(d) {
        var c = $.ui.keyCode,
            b = d.which;
        switch (b) {
            case c.UP:
            case c.LEFT:
                a.highlightPrev(d);
                break;
            case c.DOWN:
            case c.RIGHT:
                a.highlightNext(d);
                break;
            case c.ENTER:
            case c.NUMPAD_ENTER:
                a.handleEnterKey(d);
                break;
            case c.TAB:
                a.handleTabKey();
                break;
            case c.ESCAPE:
                a.handleEscapeKey(d);
                break
        }
    }).on("keyup.ui-selectonemenu", function(g) {
        var f = $.ui.keyCode,
            d = g.which;
        switch (d) {
            case f.UP:
            case f.LEFT:
            case f.DOWN:
            case f.RIGHT:
            case f.ENTER:
            case f.NUMPAD_ENTER:
            case f.TAB:
            case f.ESCAPE:
            case f.SPACE:
            case f.HOME:
            case f.PAGE_DOWN:
            case f.PAGE_UP:
            case f.END:
            case f.DELETE:
            case 16:
            case 17:
            case 18:
            case 224:
                break;
            default:
                var i = $(this).val(),
                    c = null,
                    h = g.metaKey || g.ctrlKey || g.shiftKey;
                if (!h) {
                    clearTimeout(a.searchTimer);
                    c = a.options.filter(function() {
                        return $(this).text().toLowerCase().indexOf(i.toLowerCase()) === 0
                    });
                    if (c.length) {
                        var b = a.items.eq(c.index());
                        if (a.panel.is(":hidden")) {
                            a.selectItem(b)
                        } else {
                            a.highlightItem(b);
                            PrimeFaces.scrollInView(a.itemsWrapper, b)
                        }
                    }
                    a.searchTimer = setTimeout(function() {
                        a.focusInput.val("")
                    }, 1000)
                }
                break
        }
    })
}

如果我正确理解了该代码,那么导致我的问题的是以下部分,对吧?

a.searchTimer = setTimeout(function() {
                    a.focusInput.val("")
                }

0 个答案:

没有答案