Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: ZAJDAN 07. 11. 2018, 10:24:23

Název: JavaScript - ukončení funkce z předešlé podmínky
Přispěvatel: ZAJDAN 07. 11. 2018, 10:24:23
Ahoj...
Lze provést ukončení funkce z předešlé podmínky?
Zkouším to pomocí clearTiemout, ale nevede se mi to.

Kliknutím na obrázek v carouselu, dostanu ten nakliknutý obrázek do stavu 'active', vyvolají se akce a jedna z nich je funkce s nastaveným TimeOutem.
Jenže pokud stihnu v tom nedoběhlém Timeoutu dostat do statusu 'active' jiný/nový obrázek, tak potřebuji aby se předešlá funkce v již běžícím Timeoutu zastavila.

Kód: [Vybrat]
if ($("#104_carousel  > div.carousel-wrapper >  img.carousel:nth-child(1)").hasClass("active")){
if ( $("#z-type").is(":checked") ){
  if ( $("#z-type").is(":checked") ){
    $('#D30').click();
    var timeOut = setTimeout(function(){ $('#D10').click(); }, 3000);
    }
}
     else if ( $("#f-type").is(":checked") ){
    $('#D40').click();
    var timeOut = setTimeout(function(){ $('#D10').click(); }, 3000);
    }
     else { $('#D40').click(); }
}

else if ($("#104_carousel  > div.carousel-wrapper >  img.carousel:nth-child(2)").hasClass("active")){
if ( $("#f-type").is(":checked") ){
      clearTimeout(timeOut);
      $('#D30').click();
      timeOut = setTimeout(function(){ $('#D10').click(); }, 6000);
}
else{}
}
Název: Re:JavaScript - ukončení funkce z předešlé podmínky
Přispěvatel: Filip Jirsák 07. 11. 2018, 10:40:17
Ano, lze. Ale musíte si tu návratovou hodnotu z funkce setTimeout() uložit do nějaké proměnné nebo objektu, který bude dostupný i při tom příštím volání kódu, kde je to setTimeout(). U jednoduchého kódu to může být globální proměnná, jakmile je to trošku složitější, je dobré ta data nějak zapouzdřit – buď pomocí objektu, nebo v JavaScriptu pomocí scope vnořených funkcí (vizte třeba Základní vzory pro vytváření jmenných prostorů v JavaScriptu (https://www.zdrojak.cz/clanky/zakladni-vzory-pro-vytvareni-jmennych-prostoru-v-javascriptu/)).
Název: Re:JavaScript - ukončení funkce z předešlé podmínky
Přispěvatel: ZAJDAN 07. 11. 2018, 10:46:25
Ano, lze. Ale musíte si tu návratovou hodnotu z funkce setTimeout() uložit do nějaké proměnné nebo objektu, který bude dostupný i při tom příštím volání kódu, kde je to setTimeout(). U jednoduchého kódu to může být globální proměnná, jakmile je to trošku složitější, je dobré ta data nějak zapouzdřit – buď pomocí objektu, nebo v JavaScriptu pomocí scope vnořených funkcí (vizte třeba Základní vzory pro vytváření jmenných prostorů v JavaScriptu (https://www.zdrojak.cz/clanky/zakladni-vzory-pro-vytvareni-jmennych-prostoru-v-javascriptu/)).
to je na mě moc složité, jak jsem lama
Název: Re:JavaScript - ukončení funkce z předešlé podmínky
Přispěvatel: ZAJDAN 07. 11. 2018, 10:54:48
a přitom stačilo tak málo :ú
deklarovat tu proměnou mimo podmínku
Kód: [Vybrat]
var timeOut = 0;
if ($("#104_carousel  > div.carousel-wrapper >  img.carousel:nth-child(1)").hasClass("active")){
if ( $("#z-type").is(":checked") ){
  if ( $("#z-type").is(":checked") ){
    $('#D30').click();
    var timeOut = setTimeout(function(){ $('#D10').click(); }, 3000);
    }
}
     else if ( $("#f-type").is(":checked") ){
    $('#D40').click();
    var timeOut = setTimeout(function(){ $('#D10').click(); }, 3000);
    }
     else { $('#D40').click(); }
}

else if ($("#104_carousel  > div.carousel-wrapper >  img.carousel:nth-child(2)").hasClass("active")){
if ( $("#f-type").is(":checked") ){
      clearTimeout(timeOut);
      $('#D30').click();
      timeOut = setTimeout(function(){ $('#D10').click(); }, 6000);
}
else{}
}
Název: Re:JavaScript - ukončení funkce z předešlé podmínky
Přispěvatel: BoneFlute 07. 11. 2018, 11:36:17
Ještě bych dal pryč ty var v var timeOut, protože pak by to jakože vytváří nový kontext. V tvém kódu to asi nic neprovede, protože tam nemáš žádnou function() {}, která by ten kontext vytvořila, ale někdy v budoucnosti do toho kódu šáhneš, a nečekaně se ti to rozbije.
Název: Re:JavaScript - ukončení funkce z předešlé podmínky
Přispěvatel: ZAJDAN 07. 11. 2018, 11:48:19
Ještě bych dal pryč ty var v var timeOut, protože pak by to jakože vytváří nový kontext. V tvém kódu to asi nic neprovede, protože tam nemáš žádnou function() {}, která by ten kontext vytvořila, ale někdy v budoucnosti do toho kódu šáhneš, a nečekaně se ti to rozbije.

yes yes...var jsem zapsal pouze nahoře(mimo podmínky)
v podmínkách už volám jen název proměnné