Autor | Zpráva | ||
---|---|---|---|
hunter_dave Profil |
#1 · Zasláno: 12. 8. 2011, 00:01:36 · Upravil/a: hunter_dave
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 |
#2 · Zasláno: 12. 8. 2011, 00:26:04 · Upravil/a: Liennie
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 |
#3 · Zasláno: 12. 8. 2011, 00:39:55
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 |
#4 · Zasláno: 12. 8. 2011, 00:43:22
krom toho je to udalost onkeyup a znak se zapisuje pri stisku klavesy ne pri jejim pusteni
|
||
Chamurappi Profil |
#5 · Zasláno: 12. 8. 2011, 00:48:09
Reaguji na huntera_dave:
To první áčko ve zkratce AJAX znamená asynchronní. Nemůžeš pracovat s result em 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 |
#6 · Zasláno: 12. 8. 2011, 00:59:07
a jak to mám napravit?
|
||
hunter_dave Profil |
#7 · Zasláno: 12. 8. 2011, 01:46:46
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 :)
|
||
Časová prodleva: 13 let
|
0