Autor Zpráva
hunter_dave
Profil
Zdravím mám našeptávač, všechno funguje perfektně, až na to, že když napíšu např: "po" ... našeptávač bere jenom "p" když napíšu "pod" bere "po" fce se spustí až po druhé události onkeyup a nevím proč. tady je zdroják:
Pokud to chce někdo vyzkoušet v praxi : http://tests.field.cz
Zadejte např "po"
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<title></title>
<script src="jquery.js" >
</script>
<style>
.whispererdiv{
width:100%;
font-size:80%;
cursor:default;
}
</style>
</head>                                       
<body>event.keyCode enter13|down40|up38|right39<br>
<input type=text value="" onkeyup="getwhisperer();" onfocus="getwhisperer();" onblur="hidewhisperer();" autocomplete="off" size=26 id=searchfield>
<input type=hidden id=backup_whisperer>
<br>
<div style="display:none;z-index:1;width:195px;height:100px;border:1px solid black;overflow:auto;" id="whisperer">
</div>
<script type=text/javascript>           
function getwhisperer(){      
$.get("whisperer.php?search="+document.getElementById('searchfield').value+"", function(response){result = response;});
if(result!=""){
document.getElementById('whisperer').innerHTML=result;
document.getElementById('whisperer').style.display="";
}
else{
document.getElementById('whisperer').innerHTML="";
document.getElementById('whisperer').style.display="none";
}
}

function hidewhisperer(text){
document.getElementById('whisperer').style.display="none";
}

function fillsearch(text){
document.getElementById('searchfield').value=text;
hidewhisperer();
}

function whispererchange(id){

               var backup = document.getElementById('backup_whisperer').value
               if ( backup != "" ){
               document.getElementById(backup).style.backgroundColor = "";
               }
               document.getElementById(id).style.backgroundColor = "dodgerblue";
               document.getElementById('backup_whisperer').value = id;
                
}
</script>


</body>
</html>
Liennie
Profil
Je to tím, že prohlížeč nejdříve spustí fci a až potom vloží další znak. Stačí funkci pomocí setTimeout spouštět s mírným spožděním.

Edit:
Chyba byla nakonec ve skriptu. Funkce na 23. řádku se spouští, až dostane odpověď od souboru, takže se nejdřív provedl zbytek kódu, který v proměnné result viděl předchozí hodnotu a až potom se proměnná result přepsala.
function getwhisperer(){
$.get("whisperer.php?search="+document.getElementById('searchfield').value+"", function(response){
result = response;
if(result!=""){
document.getElementById('whisperer').innerHTML=result;
document.getElementById('whisperer').style.display="";
}
else{
document.getElementById('whisperer').innerHTML="";
document.getElementById('whisperer').style.display="none";
}
});
}
hunter_dave
Profil
To už jsem zkoušel .. nefunguje .. spoustel jsem to se spozdenim 500 ms .. dokonce jsem skousel alertem podívat se na hodnotu inputu .. byla spravne ..
hunter_dave
Profil
krom toho je to udalost onkeyup a znak se zapisuje pri stisku klavesy ne pri jejim pusteni
Chamurappi
Profil
Reaguji na huntera_dave:
To první áčko ve zkratce AJAX znamená asynchronní. Nemůžeš pracovat s resultem těsně poté, co jsi vyslal požadavek na server, protože ještě nedorazila odpověď ze serveru a funkce plnící result se ještě nevykonala.
hunter_dave
Profil
a jak to mám napravit?
hunter_dave
Profil
Díky radě Chamurappiho jsem to vyřešil ... funguje to .. dodělal jsem ještě navigaci šipkami .. dolu, nahoru .. doprava(vyplnit) enter (vyplnit a odeslat). Díky moc :)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0