javascript - 如果元素失去焦点,关闭弹出 div

标签 javascript jquery

我有以下场景:在标签的鼠标悬停事件中,我显示了一个 div。 div 必须保持打开状态才能在 div 中进行选择。在标签的 mouseout 事件中,div 必须消失。问题是当我的光标从标签移动到 div 时,标签的 mouseout 事件被触发,它在我到达那里之前关闭了 div。我有一个名为 canClose 的全局 bool 变量,我根据必须关闭或保持打开的情况将其设置为 true 或 false。为此,我删除了关闭标签的 mouseout 事件上的 div 的功能。 下面是一些示例代码。

编辑 我找到了解决我的问题的方法,尽管 Alex 也提供了一个可行的解决方案。 我还在标签上添加了一个 mouseleave 事件,带有一个将在 1.5 秒内执行的 setTimeout 函数。这一次将为用户提供足够的时间将鼠标悬停在打开的 div 上,这将再次将 canClose 设置为 false。

$("#label").live("mouseover", function () {
        FRAMEWORK.RenderPopupCalendar();
    });

$("#label").live("mouseout", function () {
        setTimeout(function(){
            if(canClose){
                FRAMEWORK.RemovePopupCalendar();
            }
        },1500);
    });

    this.RenderPopupCalendar = function () {
        FRAMEWORK.RenderCalendarEvents();
        }
    };


    this.RenderCalendarEvents = function () {
        $(".popupCalendar").mouseenter(function () {
            canClose = false;
        });

        $(".popupCalendar").mouseleave(function () {               
            canClose = true;
            FRAMEWORK.RemovePopupCalendar();
        });
    }

    this.RemovePopupCalendar = function () {
        if (canClose) {
            if ($(".popupCalendar").is(":visible")) {
                $(".popupCalendar").remove();
            }
        }
    };

有什么帮助吗?

最佳答案

我会包装 <label><div>在包含<div>然后在上面做所有鼠标/隐藏事件。

查看这个 fiddle 示例 - http://jsfiddle.net/6MMW6/1

关于javascript - 如果元素失去焦点,关闭弹出 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12179402/

相关文章:

javascript - 将youtube视频嵌入网络获取 `Failed to load resource: net::ERR_CONNECTION_CLOSED`

javascript - 尝试在 Ember、Starfield 组件中使用 HTML5 和 Javascript

javascript - 创建事件时选择时间时禁用拖动

javascript - 谷歌图表和 jquery POST

javascript - jQuery every - 绑定(bind)到所有元素而不是单个元素

javascript - 为什么我在以下 javascript 代码中收到未定义的条目

javascript - GA GEO 图表城市标记不正确

javascript - 通过 Ajax 的图像数据 - 如何在页面上显示图像

javascript - jquery 选择所有复选框

javascript - jQuery Image Popup 和固定导航