2013-07-15 135 views
1

與我的fiddle,我使它突出顯示一個主菜單按鈕加載和show()和hide()相應的按鈕設置在底部。jQuery - 觸發顯示(),隱藏()按鈕點擊

我認爲是錯誤的,但無法弄清自己是要做的$ this變量的參考範圍在我的switch語句中。在我的情況下,$這指向單擊的按鈕值,我認爲是類的名稱,但在我的switch語句中,我不確定是否可以引用$ this中的id名稱。我想我的問題是$ this在我的場景中有什麼價值?

很高興看到一個可行的例子,可能使用較少的代碼,因爲我可以看到許多重複的地方,它可以簡化。

$('.menu').click(function() { 
    if ($(this) != $('.highlight')) { 
     $(this).addClass('highlight') 
      .siblings('.menu') 
      .removeClass('highlight'); 
    } 
    switch ($this) { 
     case '#dateMenu': 
      $('.date-chart').show(); 
      $('.jc-chart').hide(); 
      $('.jp-chart').hide(); 
      $('.ws-chart').hide(); 
      break; 
     case '#jcMenu': 
      $('.date-chart').hide(); 
      $('.jc-chart').show(); 
      $('.jp-chart').hide(); 
      $('.ws-chart').hide(); 
      break; 
     case '#jpMenu': 
      $('.date-chart').hide(); 
      $('.jc-chart').hide(); 
      $('.jp-chart').show(); 
      $('.ws-chart').hide(); 
      break; 
     case '#wsMenu': 
      $('.date-chart').hide(); 
      $('.jc-chart').hide(); 
      $('.jp-chart').hide(); 
      $('.ws-chart').show(); 
      break; 
    } 
}); 
+1

我會想到:'開關(this.id)...情況下( 「wsMenu」)' - 但你可能只是需要隱藏的兄弟姐妹和顯示$此,一旦你設定$ this = $(this) - 並且你需要$(this).hasClass('。highlight') – mplungjan

+1

這裏是'$ this'?我想這應該是'$(this)',這再次沒有道理.. :) – bipen

+0

switch($(this).prop('id'))然後在你的case語句中,刪除#號 – frenchie

回答

2

$this應該$(this) ......這是refrence當前元素......因爲你正在檢查的ID。使用prop()

switch ($(this).prop('id')) { or switch (this.id) { ... 

並取出#形式的情況下

試試這個

$('.menu').click(function() { 
if (!$(this).hasClass('.highlight'))) { 
    $(this).addClass('highlight') 
     .siblings('.menu') 
     .removeClass('highlight'); 
} 

switch ($(this).prop('id')) { 
    case 'dateMenu': 
     $('.date-chart').show(); 
     $('.jc-chart').hide(); 
     $('.jp-chart').hide(); 
     $('.ws-chart').hide(); 
     break; 
    case 'jcMenu': 
     $('.date-chart').hide(); 
     $('.jc-chart').show(); 
     $('.jp-chart').hide(); 
     $('.ws-chart').hide(); 
     break; 
    case 'jpMenu': 
     $('.date-chart').hide(); 
     $('.jc-chart').hide(); 
     $('.jp-chart').show(); 
     $('.ws-chart').hide(); 
     break; 
    case 'wsMenu': 
     $('.date-chart').hide(); 
     $('.jc-chart').hide(); 
     $('.jp-chart').hide(); 
     $('.ws-chart').show(); 
     break; 
} 
}); 

fiddle here

更新

爲減少代碼...您可以使用兄弟姐妹( )。

switch ($(this).prop('id')) { 
    case 'dateMenu': 
     $('.date-chart').show().siblings().hide(); 

     break; 
    case 'jcMenu': 

     $('.jc-chart').show().siblings().hide(); 

     break; 
    case 'jpMenu': 

     $('.jp-chart').show().siblings().hide(); 

     break; 
    case 'wsMenu': 

     $('.ws-chart').show().siblings().hide(); 
     break; 
} 

updated fiddle

+0

+1但請修正錯誤的if($(this)!= $('。highlight'))'我相信應該是'如果(!$(this.hasClass('。highlight'))' – mplungjan

+0

@mplungjan ..thanks ...沒有想到那個...不錯..:)...更新.. – bipen

1

($this)是錯誤的不分配,而是使用this.id

您可以使用確實像

var id = this.id; 
switch (id) 

並刪除你的情況下#,並像下面

switch (this.id) { 
     case 'dateMenu': //removed # 
      $('.date-chart').show(); 
      $('.jc-chart').hide(); 
      $('.jp-chart').hide(); 
      $('.ws-chart').hide(); 
      break; 
     case 'jcMenu': //removed # 
      $('.date-chart').hide(); 
      $('.jc-chart').show(); 
      $('.jp-chart').hide(); 
      $('.ws-chart').hide(); 
      break; 
     case 'jpMenu': //removed # 
      $('.date-chart').hide(); 
      $('.jc-chart').hide(); 
      $('.jp-chart').show(); 
      $('.ws-chart').hide(); 
      break; 
     case 'wsMenu': //removed # 
      $('.date-chart').hide(); 
      $('.jc-chart').hide(); 
      $('.jp-chart').hide(); 
      $('.ws-chart').show(); 
      break; 
    } 

工作fiddle

+0

$ this = this.id是很差的文檔。 $ x通常表示var是一個jQuery對象。 – mplungjan

+0

@mplungjan感謝您指出錯誤。從谷歌搜索,http://james.padolsey.com/javascript/jquery-code-smells/我知道這是一個醜陋的做法。但是其他原因呢? – Praveen

+1

如果您使用$ this,那麼請確保它是$(this)。如果你使用$ mydivs,那麼確保它是$(「一些選擇器返回divs」) - 如果你的代碼是自我記錄的,不要使用一個名稱混淆讀者的變種。如果你不想使用$,那很好。它仍然是'id = this.id',或者在這種情況下根本不需要保存它,因爲我們只使用它一次。 – mplungjan

相關問題