webForumDet fria alternativet

Uppdatera div?

10 svar · 652 visningar · startad av Travoni

TravoniMedlem sedan okt. 20041 556 inlägg
#1

Jag skulle vilja att denna funkar så att den skriver bara "Ping!" till diven var tredje sekund även fast jag skriver som febrilt i textboxen, skriver jag inget så skall "Ping!" raderas efter några sekunder.
Hur gör jag det?
Nu verkar ju timeout starta på nytt hela tiden.

<script>
var i=0;
function state_change(){
	if(i==0){
		document.getElementById('puff').innerHTML = '';
		setTimeout("i=1;", 3000);
	}else{
	i=0;
	document.getElementById('puff').innerHTML = 'Ping!';
	}
};

</script>

<input type="text" onkeyup="state_change()">
<div id="puff"></div>
nitro2k01Medlem sedan aug. 20039 342 inlägg
#2

Jag är inte säker på vad du menar, men detta bör fungera:

<script type="text/javascript">
// Referens till en gjord timeout
var currenttimeout=0;
function state_change(i){
	// Om det finns en timeout som väntar...
	if (currenttimeout)
		// ... så ta bort den!
		clearTimeout(currenttimeout);

	if(i){
		// Kod som ska köras när användaren inte har skrivit på 3 sekunder
		document.getElementById('puff').innerHTML = '';
	}else{
		// Kod som ska köras när användaren skriver i rutan
		document.getElementById('puff').innerHTML = 'Upd!';

		// Ta bort om 3 sekunder...
		currenttimeout=setTimeout("state_change(1);", 3000);
	}
};

</script>

<input type="text" onkeyup="state_change(0)" />
<div id="puff"></div>
TravoniMedlem sedan okt. 20041 556 inlägg
#3

/r.
Tack,
det ser helt rätt ut nu, men eftersom att en funktion skall köras här:

	}else{
                    //Här
                    kör_funktion();

Så kommer funktionen köras varje gång man lyfter fingret ifrån tangentbordet.

Jag skulle vilja att den funktionen körs var tredje sekund (Om det skrivs i textboxen vill säga.)

TravoniMedlem sedan okt. 20041 556 inlägg
#4

Så här:

<script type="text/javascript">
// Referens till en gjord timeout
var currenttimeout=0;
var f = 0;
function state_change(i){
	// Om det finns en timeout som väntar...
	if (currenttimeout)
		// ... så ta bort den!
		clearTimeout(currenttimeout);

	if(i){
		// Kod som ska köras när användaren inte har skrivit på 3 sekunder
		document.getElementById('puff').innerHTML = '';
		f = 0;

	}else{
		if(!f){
                         // Kod som ska köras när användaren skriver i rutan
		document.getElementById('puff').innerHTML = 'Skriver...'; f=1;
		}
		// Ta bort om 3 sekunder...
		currenttimeout=setTimeout("state_change(1);", 3000);
	}
};

</script>

<input type="text" onkeyup="state_change(0)" />
<div id="puff"></div>

Det kanske finns ett bättre sätt men detta verkar funka.

Peter SMedlem sedan dec. 20025 483 inlägg
#5

Glöm inte att acceptera ditt senaste inlägg som slutgiltigt. :)

TravoniMedlem sedan okt. 20041 556 inlägg
#6

Ok, men är de det bästa sättet?

Peter SMedlem sedan dec. 20025 483 inlägg
#7

Svårt att säga, men i mina ögon ser det i alla fall bra ut. Du behöver nog inte fundera så mycket mer på detta.

MickeA.comMedlem sedan feb. 20034 441 inlägg
#8

Har lite problem med Settimeout, förstår inte hundra hur det fungerar. Jag har det här i en funktion:

getElemRefs("hand_rate").innerHTML = "Thanks for your vote!";
setTimeout(getElemRefs("hand_rate").innerHTML = message, 2000);

Tanken är att det ska stå "Thanks for your vote" i två sekunder och sen ska "message" skrivas till samma element.

Hur ska jag göra? Det vore även coolt om man kunde få "Thanks for your vote" att blinka under 2-3 sekunder innan den byter text.

Tack!

johaseoMedlem sedan maj 2009250 inlägg
#9
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<SCRIPT language="javascript">

function init()
{
    obj=document.getElementById("hand_rate");
    obj.innerHTML = "Thanks for your vote!";
    setTimeout ( "delayThisaBit()", 2000 );

}
function delayThisaBit()
{
    obj=document.getElementById("hand_rate");
    obj.innerHTML = "The Vote is now registered!";
}
</SCRIPT>
<body onload="init()">
    <form id="form1" runat="server">
    <div id="hand_rate">
    
    </div>
    </form>
</body>
</html>

prova det här istället ....

MickeA.comMedlem sedan feb. 20034 441 inlägg
#10

Det ovan funkar, men i mitt fall så _måste_ jag skicka med ett argument, eftersom det är ett dynamiskt meddelade som ska visas efter "thanks for your vote".

Har provat fram och tillbaks, men får det inte att funka.

Förslag?

MickeA.comMedlem sedan feb. 20034 441 inlägg
#11

Löste det genom:

var msg;

Högst upp i koden, sen sätter min funktion ett värde till den variabeln som sen visas.

Case closed, tack för hjälpen.

136 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)