2012-02-03 16 views
9

jQuery'yi kullanarak açılan ve kapanan bir menü oluşturuyorum. Basit bir ifadeyle, bu gibi çalışır:

function open_menu() { 
    $(this).next('ul.sub-menu').css('display', 'block').stop(true, false).animate({ 
     width: '235px', 
    }, 500); 
} 

function close_menu() { 
    // close code here 
} 

status = 'closed'; // set the default menu status 

$('a').click(function() { 
    switch(status) { 
     case 'closed': 
      open_menu(); 
      break; 
     case 'open': 
      close_menu(); 
      break; 
    } 
} 

beklendiği gibi ben her eserlerini open_menu() içeriğini alıp .click() olay open_menu() yerine koyarsanız. Kodu yukarıdaki gibi kullanırsam, $(this), .click()'un bunu tetiklediğini ve kodun çalışmadığını belirleyemez.

$(this) seçicinin open_menu() içinde tutulurken nelerin tetiklendiğini görmek için yapabileceğim bir şey var mı?

cevap

15

thisopen_menu fonksiyonunun bağlam değil bağlantının tıklama işleyicisi olduğunu. Böyle bir şey yapmanız gerekir:

open_menu(this); 

function open_menu(that) { 
    $(that).next(... 
2

Neden bir parametre olarak geçirmiyoruz? Eğer open_menu yılında başvurmak

function open_menu($this) { 
    $this.next('ul.sub-menu').css('display', 'block').stop(true, false).animate({ 
     width: '235px', 
    }, 500); 
} 

function close_menu() { 
    // close code here 
} 

status = 'closed'; // set the default menu status 

$('a').click(function() { 
    switch(status) { 
     case 'closed': 
      open_menu($(this)); 
      break; 
     case 'open': 
      close_menu(); 
      break; 
    } 
} 
+0

Bunu denedim, ancak düzgün bir şekilde yapmadım. Düğmeden hemen önce 'test = $ (this);' ı ekledim ve bunu ilettim. Ses doğru mu? – Combobreaker

+0

Çalıştırdım. Bunu kullanmak zorundaydım, '' 'değil. Teşekkürler. – Combobreaker

5

Fonksiyondaki this değerini ayarlamak için geçerli kullanabilirsiniz.

open_menu.apply(this) 
+0

+1 Soruyu yanıtlıyor ... * "Yapabileceğim bir şey var mı?" $ (This) "seçicisi," open_menu() "* içinde kalırken ne ateş ettiğini –