• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd w konsoli - Jquery - zmienna lokalna

0 głosów
321 wizyt
pytanie zadane 25 czerwca 2016 w JavaScript, jQuery, AJAX przez bart_as93 Nowicjusz (150 p.)

Część, 

Mam problem z jquery. Mianowicie w przeglądarce wyskakuje mi błąd:

W Chrome:[javascript.js:47] Uncaught TypeError: Cannot read property 'removeClass' of undefined
W Firefox: TypeError: nav[stare_i] is undefined, javascript.js:47:6 

47 linijke kodu (ta z błędem) - jest koloru czerwonego poniżej:

function arrowright(){
		zakladka[i].stop().animate({'left':'120%', 'opacity' : '0'},500,function(){
			$(this).hide();
				var stare_i = i;
				if(i>=zakladka.length-2){i=0}
				else {i++};
				zakladka[i].stop().animate({'left':'-100%'},1,function(){
					$(this).show().stop().animate({'left':'0', 'opacity':'1'},500);
					nav[i].addClass('active');
					nav[stare_i].removeClass('active');
				});//koniec callbacku animate drugorzednego						
		});//koniec callbacku animate
	};//koniec funkcji arrowright

Skrypt - Strona jaką tworzę jest typu one-page z menu u góry oraz w centralnej czesci strony contentem oraz strzałki po bokach przez które można przechodzić z jednego kontentu do drugiego. 

47 linijka kodu ma za zadanie - usunąć klasę z menu u góry tak aby poprzedni kontent nie był już "aktywny" 

Zamieszczam stronę na serwerze, abyście mogli sami zobaczyć błąd w konsoli:  http://mrsandwich.pl/

oraz kod całego javascriptu: http://wklej.org/id/2629624/

 

Należy zaznaczyć, że kod wykonuje się - wszystko działa jak powinno - ale tak i tak błąd wyskakuje. 

Zależy mi na solidnej nauce tego języka - dlatego wolałbym rozwiązać ten problem, i wiedzieć co źle zrobiłem. 

Z góry dziękuję za odpowiedź,

Pozdrawiam
 

2 odpowiedzi

0 głosów
odpowiedź 25 czerwca 2016 przez argeento Szeryf (97,340 p.)

Ale żeś tam namieszał w tym JavaScripcie..

var zakladka = [];
	zakladka[0]=$('#galeria');
	zakladka[1]=$('#newsletter');
	zakladka[2]=$('#wspolpraca');
	zakladka[3]=$('#kontakt');
	zakladka[4]=$('#glowna');
	
var nav =[];
for (var z=0; z < zakladka.length-1; z++){
	nav[z]=$('.nav'+z);
}//koniec for 

Twój for zdefiniuje tablicę nav z indeksami od 0 do 3

var i = zakladka.length-1;

Zmienna i przyjmuje wartość 4

var stare_i = i;

Zmienna stare_i przyjmuje wartość 4

nav[stare_i].removeClass('active');

nav[ 4 ]. <- próbujesz odwołać się do obiektu, który de facto nie istnieje, stąd konsola rzuca błędem.

komentarz 25 czerwca 2016 przez bart_as93 Nowicjusz (150 p.)
Dzięki wielkie! ;-) i teraz wszystko jasne ;-)))

Co do namieszania, to mógłbyś mi tak pokrótce napisać co byś uprościł? ;-)
0 głosów
odpowiedź 25 czerwca 2016 przez MichuDev Pasjonat (20,360 p.)

Co do jakości kodu:

Aby robić zmienne lokalne w JavaScript używa się domknięć albo nowego sposobu zamiany "var" na "let".

Domknięcia: 

var x = 1000;

(function() {
       var x = 100;
 })(); 

alert(x); // wypisze 1000

W przypadku dobrego działania napisał  Argeento.

Podobne pytania

0 głosów
1 odpowiedź 992 wizyt
0 głosów
1 odpowiedź 244 wizyt
pytanie zadane 19 października 2017 w JavaScript, jQuery, AJAX przez lastavenger Obywatel (1,070 p.)
0 głosów
0 odpowiedzi 61 wizyt
Porady nie od parady
Zadając pytanie postaraj się o poprawną pisownię i czytelne formatowanie tekstu.Kompozycja

65,788 zapytań

112,438 odpowiedzi

237,543 komentarzy

46,728 pasjonatów

Przeglądających: 247
Pasjonatów: 13 Gości: 234

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...