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