Problem z przekazaniem zmiennej.

Problem z przekazaniem zmiennej.
S9
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 4 lata
  • Postów:70
0

Hej, jestem początkujący w kwestii JS, a właściwie to jQuery, bo na tym się opieram.
Niestety Google nie pomogło, pewnie błędnie wpisuje zapytanie, dlatego przyszedłem tutaj.
Mam problem z przekazaniem zmiennej do funkcji wywoływanej z innej funkcji, któa to wywoływana jest z jeszcze innej funkcji ;)

Kopiuj
jQuery(document).ready(function($) {

let start = 500;

$(window).resize(function(){
start = 600;
})

$(window).scroll(scrollEnded);

var scrollEnded = $.debounce(5, false, function() {
    $('.js-sticky-on-scroll').owlStickyElement();
});

jQuery.fn.owlStickyElement = function(mobile = false) {
    return this.each(function() {
        var $element = $(this);
        var x = start // Tutaj potrzebuję zmienną START
    });
};

});

Pociąłem kod, aby pokazać Wam tylko to co istotne.
Jak w takim wypadku najlepiej przekazać zmienną start? Zmienna ta ma pobrać początkową pozycję elementu i nie może się zmieniać dopóki nie dojdzie do resize() okna, dlatego musi być na starcie zadeklarowana.

Freja Draco
Freja Draco
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
2

Nie bardzo czaję, co to w ogólności ma robić, ale chyba próbujesz użyć zmiennej globalnej, a tymczasem deklarujesz zmienną blokową let;
Podejrzewam, że:

Kopiuj
start = 500;

powinno pomóc.

https://www.w3schools.com/js/js_let.asp


LukeJL
ale zmienna start jest w domknięciu na wyższym poziomie, więc powinna być widoczna i tak ze wszystkich funkcji.
Freja Draco
Freja Draco
Wątpię. Ale najlepiej nie spekulować, tyko sprawdzić, czy i jaką ma wartość, w którym momencie.
LukeJL
nie uruchamiałem tego, ale to nie spekulacja, tylko wynika to ze składni języka. Jeśli jest zadeklarowane wyżej, to jest widoczne niżej.
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:minuta
  • Postów:8423
0

Mam problem

jaki konkretnie problem?

z przekazaniem zmiennej do funkcji wywoływanej z innej funkcji

Jak to do funkcji wywoływanej z innej funkcji?


S9
scroll() wywołuje funkcje anonimową scrollEnded, a ta wywołuje funkcję owlStickyElement().
S9
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 4 lata
  • Postów:70
0

Fakt, zbyt to uprościłem. I niepotrzebnie wrzuciłem wszystkie funkcje do jednego zakresu, bo w rzeczywistości mam tak:

Kopiuj

var scrollEnded = $.debounce(5, false, function() {
    $('.js-sticky-on-scroll').owlStickyElement();
});

jQuery.fn.owlStickyElement = function(mobile = false) {
    return this.each(function() {
        var $element = $(this);
        var x = start // Tutaj potrzebuję zmienną START
    });
};

jQuery(document).ready(function($) {

let start = 500;

$(window).resize(function(){
start = 600;
})

$(window).scroll(scrollEnded);

});
L7
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 14 godzin
  • Postów:433
1

Twoja zmienna start zadeklarowana w jQuery w ready ma zasięg lokalny a nie globalny. Jak to na stackoverflow piszą

Don't fall in creating a "god object" containing all you need

:)

Zobacz sobie taki kod:

Kopiuj
<script>
	let start = 500;
	jQuery(document).ready(function($) {
		let start = 600;
		console.log(start);
	});

	function showStart() {
		console.log(start);
	}
	showStart();
</script>
edytowany 1x, ostatnio: leonpro778
S9
Tak, wiem wiem. Generalnie wiem, że mogę przerzucić to między zakresami i będzie ok, ale z czystej ciekawości pytam czy jest opcja przekazania zmiennej w takiej formie jak mam powyżej.
L7
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 14 godzin
  • Postów:433
2

Odpisuj przez odpowiedz bo brzydko to wygląda jak sam sobie odpisuje :)
Ja bym ominął to w ten sposób:

Kopiuj
<script>
	let start = 500;

	function resize() {
		$(window).resize(function() {
			start = 600;
			console.log(start);
			showStart();
		})
	}

	jQuery(document).ready(function($) {
		console.log(start);
		resize();
	});

	function showStart() {
		console.log(start);
	}
	showStart();
</script>

Oczywiście na podstawie mojego przykładu :)

edytowany 1x, ostatnio: leonpro778
S9
Najprostsze rozwiązania najlepsze. Zmienne, które mają być dostępne globalnie najlepiej dodawać na starcie kodu, tyle :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.