1

我想默认显示一个新贴纸,但它的定位方式是在悬停菜单时,子导航应该替换新贴纸。但我不能完全让它工作:

JSFiddle:http: //jsfiddle.net/rd9jS/

$(document).ready(function() {
    $('#nav > ul > li').mouseover(function () {
        $('#news').hide();
        $(this).parent().find("ul.children").not($('ul.children', this)).hide();
        $('ul.children', this).slideDown();
    });
    $('#nav .children').mouseleave(function (e) {
        setTimeout(function(){
            $(this).hide();
            $('#news').slideDown();
        },2000);
        e.stopPropagation();
    });
});
4

1 回答 1

1

在提供给的匿名函数中setTimeoutthis并不是你想的那样。它实际上是全局window对象。解决此问题的一种方法是存储对创建函数的上下文的引用。

$('#nav .children').mouseleave(function (e) {
    var $children = $(this);

    setTimeout(function(){
        $children.hide();
        $('#news').slideDown();
    ,2000);
    e.stopPropagation();
});

MDN 的"this"文档是关于这个主题的一个很好的参考,我引用:

在当前范围内绑定到 this 的对象由当前函数的调用方式决定

于 2013-04-15T07:41:49.463 回答