2010-06-24 96 views
0
$(document).ready(function() { 
      $(".LeftColumn").hide(); 
      $(".SidebarToggle").toggle(function() { 
       $(this).addClass("active"); 
       $(this).text("Hide Sidebar"); 
       $(this).attr("title", "Hide Sidebar"); 
       $(".LeftColumn").fadeIn("fast"); 
       return false; 
      }, 
      function() { 
       $(this).removeClass("active"); 
       $(this).text("Show Sidebar"); 
       $(this).attr("title", "Show Sidebar"); 
       $(".LeftColumn").fadeOut("fast"); 
       return false; 
      }); 

      $(document).mouseup(function() { 
       $('.LeftColumn').fadeOut('fast'); 
       $('.SidebarToggle').removeClass("active"); 
       $('.SidebarToggle').text("Show Sidebar"); 
      }) 
     }); 

,當用戶點擊它會隱藏LeftColumn,因爲我想在頁面上的其他地方我的問題是,但切換功能不知道會這樣,當用戶點擊SidebarToggle不會將其鏈接顯示LeftColumn,因爲它將其視爲隱藏。我怎樣才能解決這個問題?jQuery的切換功能

由於

回答

1

在這種情況下,代替的.toggle(),使用.click()並通過檢查該active.hasClass()檢測狀態的內部,這樣的:

$(function() { 
    $(".LeftColumn").hide().click(function(e) { e.stopPropagation(); }); 
    $(".SidebarToggle").click(function() { 
    if($(this).hasClass("active")) { 
     $(this).removeClass("active") 
      .text("Show Sidebar") 
      .attr("title", "Show Sidebar"); 
     $(".LeftColumn").fadeOut("fast");  
    } else { 
     $(this).addClass("active") 
      .text("Hide Sidebar") 
      .attr("title", "Hide Sidebar"); 
     $(".LeftColumn").fadeIn("fast"); 
    } 
    return false; 
    }); 
    $(document).click(function() { 
     $('.LeftColumn').fadeOut('fast'); 
     $('.SidebarToggle').removeClass("active") 
         .text("Show Sidebar"); 
    }); 
}); 

You can try a demo here

這樣,您不必擔心的狀態個功能,你檢查你點擊:)

+0

雖然按鈕不再關閉LeftColumn,但您只能通過單擊頁面上的其他位置來關閉它。我想關閉這兩個操作。 – Cameron 2010-06-24 10:03:47

+0

@Cameron - 該按鈕是否從「active」類開始? – 2010-06-24 10:06:43

+0

------ @Nick No – Cameron 2010-06-24 10:09:18

1
$(document).ready(function() { 
    var leftColumn = $('.LeftColumn'); 
    leftColumn.hide(); 
    var sidebarToggle = $('.SidebarToggle') 
    var hideSidebar = function() { 
     sidebarToggle.removeClass('active'); 
     sidebarToggle.text('Show Sidebar'); 
     sidebarToggle.attr('title', 'Show Sidebar'); 
     leftColumn.fadeOut('fast'); 
    }; 
    var showSidebar = function() { 
     sidebarToggle.addClass('active'); 
     sidebarToggle.text('Hide Sidebar'); 
     sidebarToggle.attr('title', 'Hide Sidebar'); 
     leftColumn.fadeIn('fast'); 
    }; 
    sidebarToggle.click(function() { 
     if (sidebarToggle.hasClass('active')) { 
      hideSidebar(); 
     } 
     else { 
      showSidebar(); 
     } 
     return false; 
    }); 
    $(document).click(function() { 
     if (sidebarToggle.hasClass('active')) { 
      hideSidebar(); 
     } 
    }); 
}); 
+0

按鈕不再雖然關閉LeftColumn,你只能通過點擊頁面上的其他地方關閉它。我想關閉這兩個操作。 – Cameron 2010-06-24 10:03:08

0

這給了一槍

$(document).mouseup(function (e) { 
    if (! $(e.target).is('.SidebarToggle')) { 
     $('.LeftColumn').fadeOut('fast'); 
     $('.SidebarToggle').removeClass("active"); 
     $('.SidebarToggle').text("Show Sidebar"); 
    } 
}) 
+0

這個問題不是隱藏的......有效,問題是隱藏的,但不是通過'.toggle()',這意味着它沒有交換它使用的函數,所以下一個'click'事件*也*試圖隱藏它......因爲這是'.toggle()'旋轉中的下一個函數:) – 2010-06-24 10:02:25