ugrás a tartalomhoz

settimeout - cleartimeout, de hogyan ?

figyuri · 2007. Jún. 10. (V), 20.28
Sziasztok, -van egy JS fugv. -em (honositottam, kolcsonoztem a net -rol :-):
function requestGyogyszerInfo() {
if (!oIFrame) {
createIFrame();
setTimeout(requestGyogyszerInfo, 10);
return;
}
var betegid = document.getElementById("betegid").value;
var gyogyszer_ID = document.getElementById("txtGyogyszerId").value;
oIFrame.location = "GetGyogyszerData.php?id=" + gyogyszer_ID+ "&betegid="+betegid;
}
-azt csinalja, hogy egy formrol (gyorskereses,
<INPUT TYPE="text" NAME="nev" id="txtGyogyszerId" value="" onkeyup="requestGyogyszerInfo()" />) erkezo karaktereket vár, s elkuldi a GetGyogyszerData.php -nak, amelyik tovabbitja az SQL -nek. Azt szeretnem ha 2 masodpercen belul ismetelten leut egy karaktert akkor az elozot :
oIFrame.location = "GetGyogyszerData.php?id=" + gyogyszer_ID+ "&betegid="+betegid;
el se kuldje. Probalkoztam a set es cleartimeout -al, de nem tudtam megoldani, hogyan lehetne megis elerni, hogy amennyiben 2 mp-en belul ismetelten leut egy karaktert akkor csak az uj kerest kuldje el ?
Koszi: -gyuri-
u.i.: hasonlot irtam az SQL -listara is, de akkor a MySQL process leallitasan gondolkoztam, de rajottem az megse jo, de elnezest azoktol akik mind2 listat olvasak, s feleslegesen terheltem kerdeseimmel... :-(
 
1

Egyszerű

attlad · 2007. Jún. 10. (V), 21.46
Amit visszaad a beállított timeout id, azt eltárolod. Az eseménykezelő elején mindig ellenőrzöd van-e beállított timeout, ha igen leállítod mielőtt az új timeoutot beállítod. (A colorer hiánya és a függvények/változók/id-k elnevezése nem jó.)
2

biztos en vagyok a bena...

figyuri · 2007. Jún. 10. (V), 22.32
Szia, -koszi a valaszt, de sajnos nem sikerult megoldanom. :-(, persze a JScript -el is hadilabon allok...
-ha nem tul nagy keres ilyen kesso este, s tenyleg olyan egyszeru nem irnad at a kov. fv. -t ? Persze tudom ilyen konkret kereseket nem szokas a listara irni, de talan 1-2 kivetelt lehet tenni...

function requestGyogyszerInfo() {
if (!oIFrame) {
createIFrame();
setTimeout(requestGyogyszerInfo, 10);
return;
}

var betegid = document.getElementById("betegid").value;
var gyogyszer_ID = document.getElementById("txtGyogyszerId").value;
oIFrame.location = "GetGyogyszerData.php?id=" + gyogyszer_ID+ "&betegid="+ betegid;
}

Koszi: -gyuri-
3

csak az alapkoncepció..

numen · 2007. Jún. 11. (H), 03.16
setTimeout(requestGyogyszerInfo, 10); 
helyett:
eztanevetmegbiztosnemhasznalod = setTimeout(requestGyogyszerInfo, 10);
és amikor le akarod állítani, akkor meg
clearTimeout(eztanevetmegbiztosnemhasznalod);
kb. ennyi. így későn nem jött le, hogy mikor meg hogyan akarod kilőni a timoutot, de az alapkoncepció ebből már látszik.
4

megse muxik a settimeout...

figyuri · 2007. Jún. 11. (H), 09.46
Sziasztok, -kosz a valaszt, de nem muxik...
function requestGyogyszerInfo() {
if (!oIFrame) {
createIFrame();
setTimeout(requestGyogyszerInfo_1, 10);
return;
}

var betegid = document.getElementById("betegid").value;
var gyogyszer_ID = document.getElementById("txtGyogyszerId").value;
oIFrame.location = "GetGyogyszerData.php?id=" + gyogyszer_ID+ "&betegid="+ betegid;
}

-ez volt az eredeti, s ezt alkottam belole :
function requestGyogyszerInfo() {
if(tim) {
clearTimeout(tim);
}
if (!oIFrame) {
tim=setTimeout(createIFrame(), 2000);
if (oIFrame)
{
setTimeout(requestGyogyszerInfo, 10);
return;
}
}
var betegid = document.getElementById("betegid").value;
var gyogyszer_ID = document.getElementById("txtGyogyszerId").value;
oIFrame.location = "GetGyogyszerData.php?id=" + gyogyszer_ID+ "&betegid="+ betegid;
}
Biztos sas szemueknek egy ranezesre beugrik a hiba, de nekem mint lámer JS -buheralo nem.
Koszi a segitseget : -gyuri-
5

egymásba ágyazott ellentmondó feltételek

zila · 2007. Jún. 11. (H), 15.11

if (!oIFrame) {
    tim=setTimeout(createIFrame(), 2000);
    if (oIFrame) {
        setTimeout(requestGyogyszerInfo, 10);
        return;
    }
}
Itt rosszul ágyaztad egymásba a feltételeket. A külső if-ben !oIFrame van, ezért ha ez nem teljesül, mert oIFrame értéke igaz, akkor a belső if (oIFrame)-re nem kerül vezérlés és fordítva, ha bele is megy a külső feltételbe mert oIFrame hamis, akkor ebbe belsőbe megintcsak nem megy bele pont ugyanezért, hiszen oIFrame értéke hamis. A SetTimeout hívásnál nem fog várakozni a script futása ezért oIFrame értéke hamis marad.

Igazából ma már ezt a problémát normális ajax technikával kéne megoldani és nem iframe nyitogatásokkal... Szerintem.

Ui: Használd a kód kiemelést a kódrészletekre, sokkal olvashatóbb lenne velük a hozzászólásod...