Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: 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.
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{}
}
-
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/)).
-
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
-
a přitom stačilo tak málo :ú
deklarovat tu proměnou mimo podmínku
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{}
}
-
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.
-
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é