2016-05-18 22 views
2

Ich versuche zu sagen, ob body x-Klasse hat, um x-Klasse hinzuzufügen.haseclass funktioniert nicht, wenn Seite aktualisiert wird

Javascript

$('body').toggleClass('projectLoaded'); 
$('[data-type="projectLoader"]').click(function() { 
    var proj = $(this)[0].getAttribute('data-project'); 
    $('#arrow-nav').addClass('slideIn'); 

    updateHash(proj); 
    return false; 
}); 
$('[data-type="projectDie"]').click(function() { 

    $('body').removeClass('projectLoaded'); 
    $('#arrow-nav').removeClass('slideIn'); 
    return false; 
}); 

if ($('body').hasClass('projectLoaded')) { 
    $('#arrow-nav').addClass('slideIn'); 
} else { 
    $('#arrow-nav').removeClass('slideIn'); 
} 

Wenn projectLoaded ausgelöst wird, die addClass funktioniert für slideIn, aber wenn ich zu aktualisieren, obwohl projectLoaded aktiv ist, verschwindet die addClass. Ich dachte, ein hasClass würde funktionieren, aber es nicht. Alles funktioniert, aber es ist nur auf Aktualisieren, es verschwindet.

Arbeitsseite here, klicken Sie auf ein Projekt und Sie werden #arrow-nav.slideIn arbeiten, aber aktualisieren und .slideIn wird nicht hinzugefügt.

UPDATE Dies ist, was für mich gearbeitet:

$('document').ready(function() { 
     if ($('body').hasClass('projectLoaded')) { 
      $('#arrow-nav').addClass('slideIn'); 
     } else { 
      $('#arrow-nav').removeClass('slideIn'); 
     } 
}); 

oder

$('body.projectLoaded').ready(function() { 
    $('#arrow-nav').addClass('slideIn'); 
}); 

Wenn dies nicht richtig ist oder gibt es eine effizientere Art und Weise, dies zu tun Sie es bitte unten eintragen.

+4

Haben Sie versucht, den Code in document.ready function() zu setzen? – ssilas777

+2

Können Sie uns etwas Arbeitscode zeigen, so dass es einfacher zu debuggen ist. – Shrabanee

+1

Etwas HTML, etwas HTML, mein Königreich für etwas HTML! – Jhecht

Antwort

2

Überprüfung bereit wie folgt helfen können

$(document).ready(function() { 
    console.log("ready!"); 
    $('body').toggleClass('projectLoaded'); 
}); 

Mein Instinkt sagt mir dies funktionieren wird, aber nur knapp sein Ziel Test es.

$('body').ready(function() { 
    console.log("ready!"); 
    $('body').toggleClass('projectLoaded'); 
}); 
+0

Beide funktionierten gut, da ich nicht sicher war über 'body ready function' also habe ich [jsFiddle here] erstellt (https://jsfiddle.net/ fxavrws0 /), um es zu testen und es funktioniert gut –

+0

@Kirankumar Wenn ich dies tue, und Alert für eine addClass austauschen, wenn auf der Homepage, wo .ProjectLoaded nicht mehr auf Körper ist, bleibt es.Erfrischen wird nicht entfernt Die Klasse. –

+0

Ist es möglich, dass ein Doppelanruf hier passiert, hatte ich eine ähnliche Erfahrung, und durch das Hinzufügen von unbind zu dem Klickanruf, das Problem behoben. $ ('[data-type = "projectDie"]') .unbind ('klick') .cli ck (function() {...} – Cyberience

1

$ ('body'). ToggleClass ('projectLoaded') mit in der Funktion loadProject gegeben(), die nach dem hasClass Zustand überprüft wird ausgeführt. Bevor also die Klasse 'projectLoaded' in den Body eingefügt wird, wird die hasClass-Bedingung überschritten, so dass die Klasse 'slideIn' nicht hinzugefügt wird. Probieren Sie diese Anweisung '$ (' body '). ToggleClass (' projectLoaded ')' im Dokument wie oben beschrieben aus. Es wird klappen.

+0

Jeder schlägt das vor, die Seite bricht, wenn ich das mache. Dadurch wird .projectLoaded sofort ausgeführt und es soll nur während eines Klickereignisses auf .projectLoader hinzugefügt werden. –

Verwandte Themen