2016-03-23 6 views
0

ich in seltsames Problem bekam, hier ist mein CodeFunktion funktioniert nicht, wenn Variablen werden zuerst

$(document).ready(function(){ 
    $(".switch-content div:first-child").fadeIn(); 
    $(".switch-content div:first-child").toggleClass("switch-active"); 
    $(".switch-menu ul li").click(function(){ 
     var clicked = $(this).index()+1; 
     $(this).parent().find("li.switch-active").toggleClass("switch-active"); 
     $(this).toggleClass("switch-active"); 
     $(this).parent().parent().parent().find(".switch-content div.switch-active").fadeOut(); 
     $(this).parent().parent().parent().find(".switch-content div.switch-active").toggleClass("switch-active"); 
     $(this).parent().parent().parent().find(".switch-content div:nth-child("+clicked+")").delay(200).toggleClass("switch-active"); 
     $(this).parent().parent().parent().find(".switch-content div:nth-child("+clicked+")").delay(200).fadeIn(); 
    }); 

}) 
var anchor = window.location.hash.substring(1); 
var linked = $("#"+anchor).index()+1; 

^dies funktioniert

Wenn mein Code so ist, alles funktioniert gut, aber wenn ich verschiebe Variablen an erster Stelle, mein Javascript funktioniert nicht mehr.

var anchor = window.location.hash.substring(1); 
var linked = $("#"+anchor).index()+1; 
$(document).ready(function(){ 
    $(".switch-content div:first-child").fadeIn(); 
    $(".switch-content div:first-child").toggleClass("switch-active"); 
    $(".switch-menu ul li").click(function(){ 
     var clicked = $(this).index()+1; 
     $(this).parent().find("li.switch-active").toggleClass("switch-active"); 
     $(this).toggleClass("switch-active"); 
     $(this).parent().parent().parent().find(".switch-content div.switch-active").fadeOut(); 
     $(this).parent().parent().parent().find(".switch-content div.switch-active").toggleClass("switch-active"); 
     $(this).parent().parent().parent().find(".switch-content div:nth-child("+clicked+")").delay(200).toggleClass("switch-active"); 
     $(this).parent().parent().parent().find(".switch-content div:nth-child("+clicked+")").delay(200).fadeIn(); 
    }); 

^dies nicht funktioniert

Weiß jemand, warum? Es ergibt keinen Sinn für mich. Und ich weiß, dass mein Code einfacher sein könnte, ich arbeite daran. :)

Vielen Dank und einen schönen Tag

+0

Haben Sie die Konsole auf Fehler überprüft? – Rajesh

+0

Ich habe die Konsole überprüft und da war nichts Ungewöhnliches, auch was meinst du mit dem nächsten, Danke. :) – Kyrbi

+0

instat von parent(). Parent(). Parent() benutze nearest() und deine verknüpfte Variable kann null sein, wenn die Seite nicht vollständig geladen wurde – madalinivascu

Antwort

0

Ich denke, es ist, weil es außerhalb der $ (document) .ready ist()

Der Browser zuerst diese Funktion laden, wenn die Seite geladen wird, die Variablen Weglassen von die Funktion, die ihren Wert bedeuten würde, wäre null.

Um es als globaler Versteh:

var Foo = {}; 

$(document.ready(function() { 
    Foo.anchor = window.location.hash.substring(1); 
    Foo.linked = $("#"+anchor).index()+1; 
    // rest of code 
}); 
+0

Ich denke, in beide Richtungen, diese Variablen wären globale Variablen und werden vor document.ready aufgerufen werden. Wenn einer gut funktioniert, sollte andere auch funktionieren – Rajesh

+0

Ich muss diese beiden als globale Variable haben. – Kyrbi

+0

ok Lemme aktualisieren meine Antwort :) – TT120

0

ich glaube, das unten Teil des Codes bricht

var anchor = window.location.hash.substring(1); 
var linked = $("#"+anchor).index()+1; 

Bitte geben Sie die Konsole überprüfen. Die Teilzeichenfolge hat möglicherweise einen Wert zurückgegeben, und jquery kann das DOM-Element nicht finden. Sobald ein JavaScript-Fehler auftritt, wird der verbleibende Teil des Codes nicht ausgeführt. Console Fehler wird Ihnen helfen, die Ursache zu kennen

+0

Dies sollte ein Kommentar sein. Außerdem hat OP bereits bestätigt, dass es in der Konsole keine Fehler gibt. – Rajesh

+0

Ich stimme dir zu Rajesh, als ich anfing, die Antwort zu tippen. Zu der Zeit, die ich eingereicht habe, gab es Kommentare gezeigt – user2846413

0

Ich fand Lösung für mein Problem. Ich habe nach etwas gesucht, bevor das Dokument geladen wurde. So habe ich es behoben.

var anchor = window.location.hash.substring(1); 
var linked = ""; 
$(document).ready(function(){ 
    linked = $("#"+anchor).index()+1; 
    $(".switch-content div:first-child").fadeIn(); 
    $(".switch-content div:first-child").toggleClass("switch-active"); 
    $(".switch-menu ul li").click(function(){ 
     var clicked = $(this).index()+1; 
     $(this).parent().find("li.switch-active").toggleClass("switch-active"); 
     $(this).toggleClass("switch-active"); 
     $(this).parent().parent().parent().find(".switch-content div.switch-active").fadeOut(); 
     $(this).parent().parent().parent().find(".switch-content div.switch-active").toggleClass("switch-active"); 
     $(this).parent().parent().parent().find(".switch-content div:nth-child("+clicked+")").delay(200).toggleClass("switch-active"); 
     $(this).parent().parent().parent().find(".switch-content div:nth-child("+clicked+")").delay(200).fadeIn(); 
    }); 
}) 

Vielen Dank, dass Sie mir geholfen haben, meinen Fehler zu erkennen. :)

Verwandte Themen