Nie działa else w if'ie w jquery


(jacko1998) #1

Oto kod:

$(document).ready(function(){

	var toggle = 0;

	if(toggle == 0) {
		$('.main-contact').click(function(){
			$(this).css({'min-height' : '520px'});
		});
		var toggle = 1;
	} else {
		$('.main-contact').click(function(){
			$(this).css({'min-height' : '100px'});
		});
		var toggle = 0;	
	}

});

No i rozwinąć mogę, lecz zwinąć już nie.


(Jim1961) #2

Masz trzy razy “var toggle”. Coś mi się wydaje że tam powinien być błąd, bo 3 razy definiujesz - czy tam deklarujesz, nigdy nie wiem :] - zmienną o tej samej nazwie.

 

Generalnie robi się to tak, a przynajmniej powinno:

$(function(){
	$('.main-contact').on('click',function(ev){
		if ($(this).hasClass('not-toggled')){
			$(this)
				.removeClass('not-toggled')
				.css({'min-height' : '520px'});
		} else {
			$(this)
				.addClass('not-toggled')
				.css({'min-height' : '100px'});
		}
	});
});

(jacko1998) #3

Coś tam próbowałem, lecz chyba nie działa. Nie rozumiem dlaczego moje rozwiązanie nie działa ;/


(kostek135) #4

Nie żartuj, cały else to dead code. Tak napisana funkcja zawsze będzie wpadać w pierwszy warunek za sprawą tego:

var toggle = 0;

if(toggle == 0) ...

(Blady214) #5

Dokładnie tak jak kostek135 pisze, nie ma szans, żeby warunek nie został spełniony, ponieważ za każdym razem przed jego sprawdzeniem przypisujesz zmiennej toggle wartość 0. Zaraz za tym przypisaniem sprawdzasz warunek, który jest spełniony (toggle == 0), zatem nie ma możliwości, żeby if się wykonał.


(Jim1961) #6

Ten jego if/else jest chybiony i należy go skasować, kropka. Podesłałem rozwiązanie, a jeżeli nie działa to sprawdź konsole, bo może błąd leży zupełnie gdzie indziej.


(jacko1998) #7

Dziękuję - Jim1961. Podziałało, po dłuższym namyśle :wink: