我想出了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("")
}