2012-02-03 115 views
9

我正在創建一個使用jQuery打開和關閉的菜單。簡單來說,它的工作原理是這樣的:

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; 
    } 
} 

如果我走open_menu()的內容並把它代替open_menu().click()事件,每按預期工作。如果我使用上面顯示的代碼,$(this)無法弄清楚,.click()解僱了它,代碼無法運行。

有什麼我可以做的,讓$(this)選擇器協商是什麼激怒了它,而保持它在open_menu()

回答

15

,你指的是open_menuthisopen_menu功能的情況下,不是鏈接的點擊處理程序。你需要做這樣的事情:

open_menu(this); 

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

爲什麼不把它作爲參數傳遞?

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

我試過這個,但我可能沒有做好。 我添加了'test = $(this);'就在切換之前,並通過它。 – Combobreaker 2012-02-03 01:06:46

+0

得到它的工作。必須使用'this',而不是'$(this)'。謝謝。 – Combobreaker 2012-02-03 06:46:36

5

您可以使用適用於設置的this值的功能。

open_menu.apply(this) 
+0

+1回答這個問題... *「有沒有什麼我可以做的,讓'$(this)'選擇器在保持它在'open_menu()''* – 2012-02-03 01:03:16

相關問題