webForumDet fria alternativet

Uppdatera div?

JavaScriptur Javascript

10 svar · 652 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Frågan#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>
Medlem sedan aug. 20039 340 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>
Medlem 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.)

Medlem 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.

Medlem sedan dec. 20025 483 inlägg
#5

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

Medlem sedan okt. 20041 556 inlägg
#6

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

Medlem 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.

Medlem 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!

Medlem 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 ....

Medlem 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?

Medlem 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.

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