2009-11-19 7 views
1

J'essaie de définir une classe à active en fonction de l'URL. J'essaie d'utiliser le code ci-dessous, mais dans tous les cas, il active la classe active pour le second onglet.Javascript - si la déclaration ne fonctionne pas?

var pathname = window.location.pathname; 

if(pathname = '/learn/subsection2') { 
      $("ul.tabs li:eq(1)").addClass("active").show(); //Activate second tab 
      $(".tab_content:eq(1)").show(); //Show second tab content 
    } else { 
      $("ul.tabs li:first").addClass("active").show(); //Activate first tab 
      $(".tab_content:first").show(); //Show first tab content 
    } 

Répondre

6

Vous attribuez plutôt que de vérifier l'égalité dans votre instruction if.

if(pathname == '/learn/subsection2') { 
... 
+3

Oh criminy ... Ça a été une longue, longue journée ... :) Merci. ::: grimace timidement et puis se cache sous un rocher ::: – phpN00b

+0

Ouais, vous assignez, ne pas comparer les valeurs de pathname et la chaîne. – putolaruan

5
if(pathname = '/learn/subsection2') { // assignment 
if(pathname == '/learn/subsection2') { // test for equality 
if(pathname === '/learn/subsection2') { // test for equality without type coercion 
+0

seulement vrai pour PHP – mauris

+3

Et JavaScript, et Ruby, et C# ... –

+2

et javascript. –

4

Vous utilisez = au lieu de ==, une erreur de programmation commune. = est l'affectation, == est la comparaison.

if (pathname == '/lean/subsection2') { // ... 

Lorsque vous utilisez =, il attribue la chaîne /lean/subsection2 à la variable pathnameet comme il évalue la valeur booléenne, ce qui est toujours vrai (il faudrait être faux ou non défini), il prend toujours le bloc de condition positive.

4

Utilisez == au lieu de = dans l'instruction if.

2

Vous avez utilisé un = au lieu d'un == ou === dans votre comparaison. C'est la raison pour laquelle de nombreux programmeurs modifient la déclaration pour qu'elle génère une erreur par rapport au code de fonctionnement involontaire ... c'est une erreur très courante!

Voici un exemple de la même instruction if g commutée. Si vous aviez utilisé ce format, mais que vous faisiez la même erreur, vous auriez lancé une erreur qui vous aurait aidé à la localiser plus rapidement:

if('/learn/subsection2' == pathname){ ... } 
Questions connexes