2010-10-08 31 views
0

我必須設置使用下列結構來自動檢測新的選項卡的標籤系統:jQuery的:運行命令只有在所選元素具有

<a href="#div1id">Show div 1</a> 
<div id="div1id">Div1</div> 

的事情是,我需要禁用重新加載能力通過單擊已顯示的選項卡選項卡。我曾嘗試使用.hasClass()和.is()來檢測點擊的選項卡是否已應用'.active',但沒有運氣。

這裏是我的動畫,改變當前代碼:

$(document).ready(function(){ 
$("#tabs li").click(function() { 
    $("#tabs li").removeClass('active'); 
    $(this).addClass("active"); 
    $(".content").hide(); 
    var selected_tab = $(this).find("a").attr("href"); 
    $(selected_tab).fadeIn(); 
}); 
}); 

回答

0

您可以使用.delegate()既讓它多一點效率,解決您的問題,如下所示:

$(function(){ 
    $("#tabs").delegate("li:not(.active)", "click", function() { 
    $("#tabs li").removeClass('active'); 
    $(this).addClass("active"); 
    $(".content").hide(); 
    $($(this).find("a").attr("href")).fadeIn(); 
    }); 
}); 

使用的BU在選擇器中,click處理程序只會在:not()具有.active類時執行......還有一個事件處理程序,而不是n事件處理程序,每個<li>一個。

+0

非常感謝,完美的作品。 – cs475x 2010-10-08 15:30:45

0

也許click事件的簡單替代

$(".active").click(function(){ 
     return false; 
}); 
0

應該沒有理由爲什麼以下不應該工作。

$(document).ready(function(){ 
    $("#tabs li").click(function() { 
     if (!$(this).hasClass('active')) { 
      $("#tabs li.active").hide(); 
      $("#tabs li.active").removeClass('active'); 
      $(this).addClass("active"); 
      $("#tabs li.active").fadeIn(); 
     } 
    }); 
}); 
相關問題