我已经从primefaces实现了一个selectOneMenu,并且当我点击它打开时,它们都应该正常工作。
<p:selectOneMenu id="dropdownMenu" value="#{viewBean.selectedItem}" styleClass="dropdown">
<p:ajax listener="#{controllerBean.onSelectedItemChanged}" />
<f:selectItem itemLabel="Item A" itemValue="A" />
<f:selectItem itemLabel="Item B" itemValue="B" />
<f:selectItem itemLabel="Item C" itemValue="C" />
</p:selectOneMenu>
但我想要的是当鼠标光标在它上面时打开它,在它离开时关闭它。
我尝试实现了mouseenter和mouseleave功能,并使用它们点击下拉列表但没有成功。
$('.dropdown').mouseenter(function(event) {
console.log("IN dropdown");
$(this).click();
});
$('.dropdown').mouseleave(function(event) {
console.log("OUT dropdown");
$(this).click();
});
消息在控制台中打印,因此检测到事件,并且还检测到点击,因为我在尝试打印时也尝试打印,但下拉列表不会以编程方式打开。
更新
更改下拉列表中触发器的click事件会使其正确打开和关闭。
$('.dropdown').mouseenter(function(event) {
console.log("IN dropdown");
$('.ui-selectonemenu-trigger',this).click();
});
$('.dropdown').mouseleave(function(event) {
console.log("OUT dropdown");
$('.ui-selectonemenu-trigger',this).click();
});
现在的问题是当我移动鼠标选择一个选项时,菜单会关闭,因为鼠标离开了下拉区域。
有关如何使其发挥作用的任何想法?
我错过了什么吗?
答案 0 :(得分:2)
将您的选择菜单声明为
<p:selectOneMenu id="dropdownMenu" value="#{viewBean.selectedItem}" styleClass="dropdown" widgetvar="selectTest">
并使用以下javascript
$('.dropdown').mouseenter(function(event) {
PF('selectTest').show();
});
$('.dropdown').mouseleave(function(event) {
var $target = $(event.toElement || event.relatedTarget);
if(!($target.hasClass("ui-selectonemenu-items") || $target.hasClass("ui-selectonemenu-panel"))){
PF('selectTest').hide();
}
});
$('.ui-selectonemenu-items-wrapper').mouseleave(function(event) {
PF('selectTest').hide();
});