Problem z przekazaniem zmiennej.

Odpowiedz Nowy wątek
2019-09-10 00:18
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 ;)

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.

Pozostało 580 znaków

2019-09-10 00:56
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:

start = 500;

powinno pomóc.

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


ale zmienna start jest w domknięciu na wyższym poziomie, więc powinna być widoczna i tak ze wszystkich funkcji. - LukeJL 2019-09-10 01:02
Wątpię. Ale najlepiej nie spekulować, tyko sprawdzić, czy i jaką ma wartość, w którym momencie. - Freja Draco 2019-09-10 01:06
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 2019-09-10 01:07

Pozostało 580 znaków

2019-09-10 01:10
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?


((0b10*0b11*(0b10**0b101-0b10)**0b10+0b110)**0b10+(100-1)**0b10+0x10-1).toString(0b10**0b101+0b100);
scroll() wywołuje funkcje anonimową scrollEnded, a ta wywołuje funkcję owlStickyElement(). - szewa90 2019-09-10 08:19

Pozostało 580 znaków

2019-09-10 08:30
0

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


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);

});

Pozostało 580 znaków

2019-09-10 09:27
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:

<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, 2019-09-10 09:28
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. - szewa90 2019-09-10 09:44

Pozostało 580 znaków

2019-09-10 09:56
2

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

<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, 2019-09-10 09:57
Najprostsze rozwiązania najlepsze. Zmienne, które mają być dostępne globalnie najlepiej dodawać na starcie kodu, tyle :) - szewa90 2019-09-10 10:30

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0