【问题标题】:How to open primefaces selectOneMenu on mouse over如何在鼠标悬停时打开primefaces selectOneMenu
【发布时间】:2016-03-16 10:31:59
【问题描述】:

我已经从 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();
});

消息在控制台中打印,因此检测到事件,并且也检测到点击,因为我也尝试在发生这种情况时打印一些内容,但下拉菜单不会以编程方式打开。

更新

更改下拉菜单中触发器的点击事件会使其正确打开和关闭。

$('.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();
});

现在的问题是,当我移动鼠标选择一个选项时,由于鼠标离开了下拉区域,菜单被关闭了。

关于如何让它发挥作用的任何想法?

我错过了什么吗?

【问题讨论】:

  • 尝试使用 .trigger('click') 代替 click();
  • 不行,.trigger('click') 也一样。

标签: javascript jquery jsf primefaces selectonemenu


【解决方案1】:

将您的选择菜单声明为

<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();
});

【讨论】:

  • 最好使用$(document).on("mouseenter", ".dropdown", callback),这样组件在ajax-updated之后它仍然可以工作。另见stackoverflow.com/q/14400624
猜你喜欢
  • 2017-08-18
  • 1970-01-01
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
  • 2021-02-20
  • 1970-01-01
  • 2017-12-25
  • 1970-01-01
相关资源
最近更新 更多