Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
09.06.2014 22:35:27
funktsioon JS ajastamine |
|
|
Tere. Tahan teha funktsiooni, mis jooksutab paraleelselt mitut elementi, hetkel liidab numbreid viitega kuni on väiksem 10
function timeo(el, nu){
setTimeout(function (){ele = document.getElementById(el);num = nu + 1;ele.innerHTML = num;if(num < 10){return timeo(el, num);}}, 1000);
} |
see töötab kenasti, kui käivitad teise elemendi nimega väljundi töötab ka esimene kenasti lõpuni. Nüüd küsimus, kuidas seda funktsiooni mis hetkel on otse setTimeout sisse kirjutatud saaks eraldi kirjutada?
Proovisin
var func1 = function (el2, nu2){ele jne... |
aga see ei saaandmeid kätte
Edit: saan aru, et hetkel tehakse iga kord kui käivitatakse uus timeo(el, nu) ka uus alam funktsioon seal timeout sees aga kui ma defineerin ennem selle ära, siis vist polegi see asi võimalik ja kood jookseb kokku või ei tee seda mida soovin.
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
neros
HV Guru

liitunud: 26.11.2003
|
09.06.2014 23:34:52
|
|
|
function myfunction(el, nu){
ele = document.getELem.....// et cetera
}
function timeo(el, nu){
setTimeOut(myfunction(el, nu), 1000);
}
|
Seletan lahti ka igaks juhuks - see function(){..} mis sa timeouti paned on t2iesti tavaline funktsioon, mis võtab igasuguseid parameetreid.
_________________ GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt. |
|
Kommentaarid: 48 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
40 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
10.06.2014 11:46:42
|
|
|
Asi pole sugugi nii lihtne kui sa arvad, selliselt väljapool olev funktsioon ei hakka tööle, esiteks tuleb ta kutsuda välja jutumärkide sees ja siis hakkab rääkima, et el ja nu defineerimata, panen ka kogu timiva proovikoodi
<html>
<!-- Created on: 9.06.2014 -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style>
#l1, #l2{width:30px;height:30px;border:solid 1px #000;text-align:center;line-height:30px;}
</style>
<script>
window.onload = function() {
var link = document.getElementById("link");
link.onclick = function() {
timeo ("l2", 1);
return false;
};
timeo ("l1", 1);
};
function myf(el, nu){
ele = document.getElementById(el);
num = nu + 1;
ele.innerHTML = num;
if(num < 10){return timeo(el, num);}
}
function timeo(el, nu){
// selliselt ei tööta, leiab, et el ja nu on sobimatud argumendid
// setTimeout('myf(el, nu)', 1000);break; break;
// sellisel kujul töötab.
setTimeout(function (){ele = document.getElementById(el);num = nu + 1;ele.innerHTML = num;if(num < 10){return timeo(el, num);}}, 1000);
}
</script>
</head>
<body>
<div id="l1">c</div>
<div id="l2">c</div>
<a href="#" id="link">Link</a>
</body>
</html> |
võin nad ära defineerida, see järal ei saa ta funktsiooni andmeid, ok nüüd teen uued muutujad, defineerin need ära ja timeo funktsiooni sees väärtustan ning sinu pakutud variant hakkab tööle (selleni jõudsin ma ka ennem siia foorumisse postitamist) kuid ta ei tee seda mis vaja. Käivitades hakkab esimene number kenasti jooksma, kuid kui nüüd panen poole pealt teist korda funktsiooni teise elemendi sees käima, katkestab esimene töö ja teine hakkab tööle. Minu algel variandil võib neid funktsioone välja kutsuda mitu ja ka eelmised töötavad oma tsükli lõpuni.
// NB mittetoimiv kood ei tee seda mida vaja!!!
var el2, nu2;
window.onload = function() {
var link = document.getElementById("link");
link.onclick = function() {
timeo ("l2", 1);
return false;
};
timeo ("l1", 1);
};
function myf(el, nu){
ele = document.getElementById(el);
num = nu + 1;
ele.innerHTML = num;
if(num < 10){return timeo(el, num);}
}
function timeo(el, nu){
el2=el;
nu2=nu;
// selliselt töötab, kuid ei tee seda mis vaja
setTimeout('myf(el2, nu2)', 1000);
// sellisel kujul töötab.
//setTimeout(function (){ele = document.getElementById(el);num = nu + 1;ele.innerHTML = num;if(num < 10){return timeo(el, num);}}, 1000);
} |
_________________

viimati muutis andrusny 10.06.2014 12:19:50, muudetud 1 kord |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
Redikate
HV veteran

liitunud: 30.12.2005
|
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
33 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
10.06.2014 12:16:07
|
|
|
Probleem selles, et na tahan selle funktsiooni, mis seal setTimeout sees on välja tõsta, et ma saaks pikema funktsiooni korral seda eraldi kirjutada.
Variant 1
setTimeout(function (){ele = document.getElementById(el);num = nu + 1;ele.innerHTML = num;if(num < 10){return timeo(el, num);}}, 1000);
|
Variant 2
setTimeout('myf(el2, nu2)', 1000); |
Sinul on ju ka mõlemal timeoutil funktsioon sisse kirjutatud, mitte funktsioon välja kutsutud mujalt. Väljakutsumises iseenesest probleemi ju polegi, ma teises koodis kirjutasin ja see teeb täpselt seda mida kirjutad aga mitte seda mida ma tahan.
Katsun veel korra selgitada.
Mul hetkel kaks numbri loendit, mis väljastavad kumbki eri div sisse 2-10
Esimene hakkab kohe tööle, teise käivitan hiljem suvalisel ajal ja nad töötavad sõltumatult lõpuni, kasutades sama timeout funktsiooni.
Selliselt võiks neid suvalise arvu käima lasta.
See variant, millele ma kirjutasin ette // NB mittetoimiv kood ei tee seda mida vaja!!! teebki selliselt, et algul esimene loendi hakkab tööle, peale teise käivitumist seiskub esimene ja teine hakkab tööle.
Variant 1 puhul tehakse vist iga timerile oma uus funktsioon, mis töötab eraldi, variant 2 kasutab sama funktsiooni ja ei saagi vist lõpuni joosta eelmise tsükliga, kuna saab ju uued argumendid kätte.
Vähemalt selliselt ei saa seda kasutada.
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
neros
HV Guru

liitunud: 26.11.2003
|
10.06.2014 12:17:05
|
|
|
http://jsfiddle.net/cSc2D/
Toimib ka v2ga h2sti... ei saa aru, kus probleem on...
_________________ GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt. |
|
Kommentaarid: 48 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
40 |
|
tagasi üles |
|
 |
Redikate
HV veteran

liitunud: 30.12.2005
|
10.06.2014 12:40:34
|
|
|
See ei toimi. Pane timeout 5000 peale ja vaata mis tulemuseks on. Antud kood kutsub funktsiooni foo välja kohe mitte timeouti peale.
Aga ma endiselt ei saa andrusny'i probleemist aru:
Siin on ju su funktsioon väljaspool setTimeouti:
http://jsfiddle.net/Y4SNt/1/
Milles siin probleem seisneb?
http://jsfiddle.net/Y4SNt/2/
Siin kutsun välja kaks timerit mis jooksevad eri aegadel ning kasutavad välist funktsiooni.
_________________ http://nodejs.org/
"I'm also a person. Programming is just one thing I do." |
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
33 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
Redikate
HV veteran

liitunud: 30.12.2005
|
10.06.2014 12:54:21
|
|
|
Teine kood ei ole ju kirjutatud nii nagu me soovitame...
See kood on nii kirjutatud nagu me soovitame, ja minuarust töötab väga hästi:
http://jsfiddle.net/Y4SNt/3/
Ja teiseks on olemas veel selline asi nagu. setInterval... Ei pea timeouti ise jooksutama 10 korda.
_________________ http://nodejs.org/
"I'm also a person. Programming is just one thing I do." |
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
33 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
10.06.2014 12:58:40
|
|
|
Tänud, ikka ise loll, ei kutsunud seda funktsiooni teise funktsiooni sees esile, nüüd ta teeb ikkagi põhimõtteliselt seda, mis mu algne koodki, tekitab neid alam funktsioone lõpmatult,
function() {
myf(el, nu);
}
kuid tegevus toimub eraldi funktsioonis.
Täpselt seda vaja oligi.
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
kuunar
Kreisi kasutaja
liitunud: 20.02.2009
|
10.06.2014 13:46:43
|
|
|
Redikate kirjutas: |
See kood on nii kirjutatud nagu me soovitame, ja minuarust töötab väga hästi:
|
Mitu korda järjest lingile vajutades lööb sassi lugemise... ei kujuta ette kas sel on muidugi mingit tähtsust üldse.
|
|
Kommentaarid: 14 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
13 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004

|
10.06.2014 14:21:54
|
|
|
setTimeout(funktsiooniNimi, 5000, parameeter1, parameeter2, ...)
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
Redikate
HV veteran

liitunud: 30.12.2005
|
10.06.2014 15:59:39
|
|
|
mikk36 kirjutas: |
setTimeout(funktsiooniNimi, 5000, parameeter1, parameeter2, ...) |
Ka toimiv jah, ning ilus clean lahendus, kuid sellel on comapability probleeme.
_________________ http://nodejs.org/
"I'm also a person. Programming is just one thing I do." |
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
33 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
10.06.2014 17:07:15
|
|
|
kuunar kirjutas: |
Redikate kirjutas: |
See kood on nii kirjutatud nagu me soovitame, ja minuarust töötab väga hästi:
|
Mitu korda järjest lingile vajutades lööb sassi lugemise... ei kujuta ette kas sel on muidugi mingit tähtsust üldse. |
See pole hetkel määrav, funktsioon tuleb siuliselt sootuks midagi muud hetkel oligi probleem, et saaks mitu korraga toimima. Praeguseks asi lahendatud. Tänud veelkord.
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
|