2010-10-08 28 views
0

Pourquoi $('a.current').removeClass('current'); ne fonctionne pas pour cette jquery tabs? 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

Bien qu'il soit agréable de voir le code source affiché, s'il vous plaît pouvez-vous le formater pour le rendre plus lisible. Les grands murs de code n'attirent pas les gens prêts à passer du temps à les déchiffrer pour qu'ils puissent commencer à vous aider. Essayez également de réduire la quantité de code à aussi peu que possible et le problème peut encore être reproduit. Et surtout, décrivez ce que le code est censé faire. Je pense que cela a quelque chose à voir avec les onglets, mais vous devez nous dire plus précisément ce que fait et ce que vous attendez. – Kev

Répondre

1

Pour autant que je peux dire (je n'ai pas encore une page de travail en cours d'exécution du code), mais il semble que la classe « courant » est seulement appliqué aux éléments "li".

Je pense que votre $ ("a.current") contiendra toujours 0 élément.

+0

Pourquoi l'élément Firebug et Chrome Inspect montre-t-il que 'a' a la classe' current'? – Binyamin

1

Votre .removeClass() appel fonctionne ne effacer la classe, mais cette ligne dans votre plugin histoire:

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

déclenche votre pour charger le premier maillon comme dans le par défaut .. .Qui est le choix qui pointent à nouveau, en ajoutant la classe en arrière, il est finalement le plugin onglet sélectionner le premier onglet et à cette ligne:

tab.addClass(conf.current); 

Ajout de la classe de retour à l'ancre (l'un chor est tab à ce moment-là).

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

+0

Remplacez 'tab.parent ('li'). AddClass (conf.current);' répare 'li.current' dont j'ai besoin, ** mais il arrête le fonctionnement de l'événement clé **. Une idée pour le réparer? Existe-t-il un autre moyen d'activer '$ ('a.current'). RemoveClass ('current');' travailler? – Binyamin

+0

@Binyamin - C'est un problème de timing, vous devez le déclencher après le premier appel de l'historique, ce qui déclenche vos onglets ... ou désactiver les paramètres par défaut, en supprimant l'instruction else avec ce lien ci-dessus. –

+0

Pourriez-vous mettre à jour http://jsfiddle.net/laukstein/ytnw9/8/? Cela peut m'aider plus. – Binyamin

1

il ne fonctionne pas parce que vous avez pas dans votre <a> avec la classe .current

Vous pouvez le vérifier par vous-même:

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

vous ramènera 0.

+0

Pourquoi l'élément Firebug et Chrome Inspect montre-t-il que 'a' a la classe' current'? – Binyamin