2013-04-15 33 views
1

我想默認顯示一個newsticker,但它的定位方式是,當懸停菜單時,subnav應該替換newsticker。但我不能完全得到它的工作:Toggling subnav和newsticker

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

回答

1

在提供給setTimeout匿名函數,this是不是你認爲它是。它實際上是全球的window對象。解決此問題的一種方法是存儲對創建函數的上下文的引用。

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

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

MDN的"this"文件是關於這個問題的一個很好的參考,我引述:

在當前範圍內綁定到該對象由當前函數是怎麼被調用確定

+0

真棒!今天學會了一個新的竅門! :d – 3zzy