【问题标题】:Prevent datepicker from triggering parent mouseleave防止 datepicker 触发父 mouseleave
【发布时间】:2013-04-24 15:03:23
【问题描述】:

我在 jQuery $.hover() 上显示带有 jQ​​uery $.animate({height: 'toggle', opacity: 'toggle'}) 的绝对 div

我有一个 jQuery UI 日期选择器附加到上述绝对 div 内的一个 div 和 changeMonth: truechangeYear: true

当月份或年份发生变化或选择日期时,动画会触发。

如何防止月/年更改和日期选择触发$.hover()

http://jsfiddle.net/e3zP2/

html

<div id="hoverAnchor">hover me</div>
<div id="hoverMe" style="display:none">
    arbitrary text
    <div id="dateSelector"></div>
</div>

js

$(document).ready(function () {
    
    $("#dateSelector").datepicker({
        changeMonth: true,
        changeYear: true
    });
    
    $("#hoverAnchor").add($("#hoverMe")).hover(function(){
        $("#hoverMe").stop(true,false).animate({
            height: 'toggle',
            opacity: 'toggle'
        }, 200);
    });
    
});

【问题讨论】:

    标签: jquery jquery-ui hover jquery-ui-datepicker jquery-events


    【解决方案1】:

    您需要做几件事才能使其正常工作。

    首先,您需要将 HTML 包装在 div 中以充当容器:

    HTML:

    <div id="container">
        <div id="hoverAnchor">hover me</div>
        <div id="hoverMe" style="display:none">arbitrary text
            <div id="dateSelector"></div>
        </div>
    </div>
    

    接下来,我建议不要使用.hover()(有时可能不可靠),而是使用.mouseenter().mouseleave()。还使用var 来保存日期选择器是否打开/关闭的布尔值。这个布尔值的原因是input。单击时,将调用第二个 .mouseenter() 事件,因此如果没有它,#hoverme 将再次切换。

    $(document).ready(function () {
        $("#dateSelector").datepicker({
            changeMonth: true,
            changeYear: true
        });
        var _enter = false;
        $("#container").add(
        $("#container")).mouseenter(function () {
            if (!_enter) {
                $("#hoverMe").stop(true, false).animate({
                    height: 'toggle',
                    opacity: 'toggle'
                }, 200);
            }
            _enter = true;
        }).mouseleave(function () {
            _enter = false;
            $("#hoverMe").stop(true, false).animate({
                height: 'toggle',
                opacity: 'toggle'
            }, 200);
        });
    });
    

    演示: http://jsfiddle.net/dirtyd77/e3zP2/18/

    希望这会有所帮助!

    【讨论】:

    • 泰!看到它必须进入第 18 次迭代。一定要喜欢那些 jquery ui 限制,哈哈。我在没有#container 的情况下进行了修改,它起作用了。我错过了什么吗? jsfiddle.net/e3zP2/23 我不知道这是如何工作的。哈哈,非常感谢!
    • @JoeCoderGuy 不用担心!代码在不使用#container 的情况下仍然可以工作,但是#container 可以充当一种缓冲区。假设您要确保在单击列表下方的输入值时不会切换#hoverme(尝试在月份单击Dec)。然后,您可以将 padding 添加到容器中,这样它就可以包裹所有内容。这是一个演示来展示我在说什么:jsfiddle.net/dirtyd77/e3zP2/24。只有移出该“缓冲区”才会导致#hoverme 切换。希望这是有道理的!
    • 你认为你可以修改来帮助解决这个问题吗? stackoverflow.com/questions/16197534/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多