2011-05-04 74 views
7

我有一些jQuery代碼如下:JQuery的嵌套this引用

$("#sh-zone-button-cart-menu").live("click", function(event) 
{ 
    event.preventDefault(); 
    $("#sh-zone-cart-menu").toggle(0, function(){ 
     if($(this).is(":visible")){ 
      $(this).siblings(".sh-zone-button-link-menu-content").hide(); 
      $("#sh-zone-button-cart-menu").parent().removeClass("current"); 
      //need to reference (this) for $("#sh-zone-button-cart-menu") here 
     }    
    }); 
    $("#sh-zone-button-cart-menu").parent().toggleClass("current"); 
}); 

我想從另一個子元素中訪問了我最初點擊這個基準即我想獲得這個引用,將在我的live()方法的第一個大括號之後可用。但是,我需要從另一個子元素中訪問它,即在我的toggle()方法內。

我該怎麼做?

謝謝。

+0

我很震驚,這還沒有得到更多的投票......你剛剛救了我一些時間。我不知道JavaScript lambda函數可以捕獲像這樣的局部變量! – RonLugge 2013-01-14 20:57:24

回答

11

保存this作爲一個局部變量:

$("#sh-zone-button-cart-menu").live("click", function(event) { 
    // This line saves the current 'this' as a local variable 
    // that can be accessed by inner functions   
    var thisInClick = this; 
    event.preventDefault(); 
    $("#sh-zone-cart-menu").toggle(0, function(){ 
     if($(this).is(":visible")){ 
      $(this).siblings(".sh-zone-button-link-menu-content").hide(); 
      $("#sh-zone-button-cart-menu").parent().removeClass("current"); 
      //need to reference (this) for $("#sh-zone-button-cart-menu") here 
      $(thisInClick).doSomething(); 
     }    
    }); 
    $("#sh-zone-button-cart-menu").parent().toggleClass("current"); 
}); 
+0

謝謝胡安。這解決了這個問題。我只是使用var elem = $(this),然後在需要的地方調用它。乾杯。 – 2011-05-04 21:00:52

+0

剛進入jQuery並遇到類似的問題。這個概念爲我節省了很多頭痛。 – brooklynsweb 2015-07-28 03:22:15

1

您可以在一個變量保存到this的引用,所以你以後可以使用它。

$("#sh-zone-button-cart-menu").live("click", function(event) 
{ 
    event.preventDefault(); 
    var that = this; 
    $("#sh-zone-cart-menu").toggle(0, function(){ 
     if($(this).is(":visible")){ 
      $(this).siblings(".sh-zone-button-link-menu-content").hide(); 
      $("#sh-zone-button-cart-menu").parent().removeClass("current"); 
      //need to reference (this) for $("#sh-zone-button-cart-menu") here 
      $(that).show(); // <= "that" is sh-zone-button-cart-menu 
     }    
    }); 
    $("#sh-zone-button-cart-menu").parent().toggleClass("current"); 
}); 
3

這裏是一個淡化的樣本,向您展示一般技術。

$("#sh-zone-button-cart-menu").live("click", function(event) 
{ 
    var that = this; 

    $("#sh-zone-cart-menu").toggle(0, function(){ 
     alert($(that).attr('id')); 
     alert($(this).attr('id')); 
    }); 

}); 
0

在實時回調中,您有另一種方法'切換'。這裏的this關鍵字指的是ID爲$('#sh-zone-cart-menu')的特定元素。

如果要訪問該引用,只需使用該選擇器即可。

+1

重點是他不想再次選擇,因爲它已經可以用'this'了。無需做額外的工作。 – 2011-05-04 20:13:21