2010-10-08 20 views
0

爲什麼$('a.current').removeClass('current');不適用於此jquery選項卡? http://jsfiddle.net/laukstein/ytnw9/8/

//full JS in http://jsfiddle.net/laukstein/ytnw9/8/ 
$(function(){ 
var list=$('#list'), 
    elementsPerRow=-1, 
    loop=true, 
    // find first image y-offset to find the number of images per row 
    topOffset=list.find('a:eq(0)').offset().top, 
    numTabs=list.find('li').length-1, 
    current,newCurrent; 

function changeTab(diff){ 
    // a.current set by jQuery Tools tab plugin 
    $('li.current').removeClass('current'); 
    current=list.find('a.current').parent('li').addClass('current').index(); 
    newCurrent=(loop)?(current+diff+numTabs+1)%(numTabs+1):current+diff; 
if(loop){ 
    if(newCurrent>numTabs){newCurrent=0;} 
    if(newCurrent<0){newCurrent=numTabs;} 
}else{ 
    if(newCurrent>numTabs){newCurrent=numTabs;} 
    if(newCurrent<0){newCurrent=0;} 
} 
    // don't trigger change if tab hasn't changed (for non-looping mode) 
if (current!=newCurrent){ 
    list.find('li').eq(current).removeClass('current'); 
    list.find('li').eq(newCurrent).addClass('current').find('a').trigger('click'); // trigger click on tab 
} 
} 
list 
    // set up tabs 
    .tabs("#content",{effect:'ajax',history:true, xonBeforeClick:function(){changeTab(0)}}) 
    // find number of images on first row 
    .find('a').each(function(i){ 
     if(elementsPerRow<0&&$(this).offset().top>topOffset){ 
     elementsPerRow=i; 
     } 
    }); 
//$('a').filter('.current').parent('li').addClass('current'); // Why does not work? 
//$('a.current').parent('li').addClass('current'); // Why does not work? 

$('ul#list li').click(function(){$('li.current').removeClass('current');$(this).addClass('current')}); 
$('a.current').removeClass('current'); // Why does not work? 
}); 

HTML:

<ul id="list"> 
    <li><a href="one.html" title="one">1</a></li> 
    <li><a href="two.html" title="two">2</a></li> 
    <li><a href="three.html" title="three">3</a></li> 
</ul> 
<div id="content"></div>​ 
+0

雖然很高興看到源代碼發佈,請你可以格式化它,使其更具可讀性。巨大的代碼牆不會吸引那些願意花時間去解密它的人,以便他們可以開始幫助你。同時儘量減少代碼的數量,儘可能減少問題的發生。重要的是,描述代碼應該做什麼。我認爲這與標籤有關,但是您需要更準確地告訴我們什麼是做什麼和您期望的。 – Kev 2010-10-08 11:45:33

回答

1

據我可以告訴(我還沒有一個工作頁面運行代碼),但現在看來,「當前」類只應用於「李」元素。

我認爲你的$(「a.current」)將總是包含0個元素。

+0

那麼爲什麼Firebug和Chrome Inspect元素顯示'a'有class'current'? – Binyamin 2010-10-08 14:16:32

1

.removeClass()呼叫工作清除類,但隨後這條線在你的歷史插件:

links.eq(0).trigger("history", [h]); 

能觸發它加載第一個鏈接作爲作爲默認.. 。其中再次選擇該鏈接,添加類的回來,這是最終的標籤插件選擇第一個選項卡,並在這一行:

tab.addClass(conf.current); 

添加類回主播(在一個chor在該點處是tab)。

Here's your fiddle updated with an alert to see what's happening a bit easier

+0

更改爲'tab.parent('li')。addClass(conf.current);'修復'我需要的'li.current',**但它停止鍵事件工作**。一些想法來解決它?有沒有其他方式來啓用'$('a.current')。removeClass('current');'working? – Binyamin 2010-10-08 13:20:19

+0

@Binyamin - 這是一個計時問題,您需要在第一次歷史記錄調用後觸發它,這會觸發您的選項卡...或者禁用歷史默認設置,通過將上述鏈接完全取出。 – 2010-10-08 13:22:23

+0

你能否更新http://jsfiddle.net/laukstein/ytnw9/8/?它可以幫助我更多。 – Binyamin 2010-10-08 13:27:12

1

這是行不通的,因爲你沒有任何<a>在你的頁面與類.current

你可以自己檢查出來:

alert($('a.current').length);

將返回0。 ..

+0

那麼爲什麼Firebug和Chrome Inspect元素顯示'a'有class'current'? – Binyamin 2010-10-08 14:15:28

相關問題