Hei, olen ihmetellyt jonkin aikaa jQueryn Autocompletellä tekemääni juttua. Se näennäisesti toimii, mutta ei oikein. Kun alkaa syöttää tekstikenttään tekstiä se löytää kyllä osumia, muttei välttämättä kaikkia. Kun tarkentaa riittävästi, niin lopulta löytyy sellaisetkin arvot jotka tietää olevan olemassa. En ole oikein päässyt perille logiikasta millä ehdotuksia tulee, esim. tulosten määrällä ei ole mitään merkitystä (kantakin on hyvin pieni, pari sataa tietuetta).
Luulisin, että jokin jQueryn FlushCache voisi auttaa, mutta en osaa käyttää sitä. Voisiko joku ystävällisesti avustaa? (Mihin sijoittaa tuo $('input#suggest').flushCache(); ja missä muodossa?)
Tässä on yksinkertaistetut esimerkkitiedostot:
<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" /> <script src="/jquery-latest.js"></script> <link rel="stylesheet" href="/jquery.autocomplete.css" type="text/css" /> <script type="text/javascript" src="/jquery.autocomplete.js"></script> <script type="text/javascript"> $().ready(function() { $("#paikka").autocomplete("/searchPaikka.php", { width: 200, selectFirst: false }); $("#paikka").result(function(event, data, formatted) { if (data) $(this).val(data[0]); document.forms.kortti.paikka_id.value = data[1]; }); }); </script> </head> <body> <form name="kortti" action="tallenna.php" method="post"> <input type="text" name="paikka" value="" id="paikka"> <input type="hidden" name="paikka_id" value="" id="paikka_id"> <input type="submit" value="Tallenna" name="tallenna"> </form> </body> </html>
searchPaikka.php:
<?php header('Content-Type: text/html; charset=ISO-8859-1'); require("../db_connect"); $dbh=mysql_connect ("$db_server", "$db_user", "$db_passwd") or die ('Database error: ' . mysql_error()); mysql_select_db ("$db_name"); $q = strtolower($_GET["q"]); if (!$q) return; $query = "SELECT * FROM `Paikat` WHERE nimi LIKE '%$q%'"; $result = mysql_query($query, $dbh) or die('SQL-virhe: ' . mysql_error()); while ($row = mysql_fetch_array($result)) { print"$row[nimi]|$row[id]\n"; } ?>
Pistin esimerkit näkyviin: http://koti.mbnet.fi/amuse/jquery
Eli tuolla on esimerkkinä kaikki Suomen kunnat. Kun hakee esim. jotain järvi -päättyvää kunnan nimeä, niin j > näkyy monta, jä > näkyy muutama, jär > ei näy mitään, järvi > näkyy kaikki.
Osaisiko joku korjata tuota niin, että kaikki vastaavuudet listattaisiin? searchPaikka.php kyllä listaa ne kun välittää hakuparametrin $_GET[q] -muuttujassa...
autocomplete.php:
<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" /> <script src="jquery.js"></script> <link rel="stylesheet" href="jquery.autocomplete.css" type="text/css" /> <script type="text/javascript" src="jquery.autocomplete.js"></script> <script type="text/javascript"> $().ready(function() { $("#paikka").autocomplete("searchPaikka.php", { width: 200, selectFirst: false }); $("#paikka").result(function(event, data, formatted) { if (data) $(this).val(data[0]); document.forms.kortti.paikka_id.value = data[1]; }); }); </script> </head> <body> <?php if(isset($_POST[paikka])){ print"Valitsit: $_POST[paikka], jonka id on $_POST[paikka_id]<br>"; } ?> <form name="kortti" action="autocomplete.php" method="post"> <input type="text" name="paikka" value="" id="paikka"> <input type="hidden" name="paikka_id" value="" id="paikka_id"> <input type="submit" value="Tallenna" name="tallenna"> </form> </body> </html>
searchPaikka.php
<?php header('Content-Type: text/html; charset=ISO-8859-1'); $q = strtolower(iconv("UTF-8", "ISO-8859-1", $_GET["q"])); if (!$q) return; $paikat = array("Akaa", "Alajärvi", "Alavieska", "Alavus", "Artjärvi", "Asikkala", "Askola", "Aura", "Brändö", "Eckerö", "Enonkoski", "Enontekiö", "Espoo", "Eura", "Eurajoki", "Evijärvi", "Finström", "Forssa", "Föglö", "Geta", "Haapajärvi", "Haapavesi", "Hailuoto", "Halsua", "Hamina", "Hammarland", "Hankasalmi", "Hanko", "Harjavalta", "Hartola", "Hattula", "Haukipudas", "Hausjärvi", "Heinola", "Heinävesi", "Helsinki", "Himanka", "Hirvensalmi", "Hollola", "Honkajoki", "Huittinen", "Humppila", "Hyrynsalmi", "Hyvinkää", "Hämeenkoski", "Hämeenkyrö", "Hämeenlinna", "Ii", "Iisalmi", "Iitti", "Ikaalinen", "Ilmajoki", "Ilomantsi", "Imatra", "Inari", "Inkoo", "Isojoki", "Isokyrö", "Jalasjärvi", "Janakkala", "Joensuu", "Jokioinen", "Jomala", "Joroinen", "Joutsa", "Juankoski", "Juuka", "Juupajoki", "Juva", "Jyväskylä", "Jämijärvi", "Jämsä", "Järvenpää", "Kaarina", "Kaavi", "Kajaani", "Kalajoki", "Kangasala", "Kangasniemi", "Kankaanpää", "Kannonkoski", "Kannus", "Karijoki", "Karjalohja", "Karkkila", "Karstula", "Karttula", "Karvia", "Kaskinen", "Kauhajoki", "Kauhava", "Kauniainen", "Kaustinen", "Keitele", "Kemi", "Kemijärvi", "Keminmaa", "Kemiönsaari", "Kempele", "Kerava", "Kerimäki", "Kesälahti", "Keuruu", "Kihniö", "Kiikoinen", "Kiiminki", "Kinnula", "Kirkkonummi", "Kitee", "Kittilä", "Kiuruvesi", "Kivijärvi", "Kokemäki", "Kokkola", "Kolari", "Konnevesi", "Kontiolahti", "Korsnäs", "Koski", "Kotka", "Kouvola", "Kristiinankaupunki", "Kruunupyy", "Kuhmalahti", "Kuhmo", "Kuhmoinen", "Kumlinge", "Kuopio", "Kuortane", "Kurikka", "Kustavi", "Kuusamo", "Kylmäkoski", "Kyyjärvi", "Kärkölä", "Kärsämäki", "Kökar", "Köyliö", "Lahti", "Laihia", "Laitila", "Lapinjärvi", "Lapinlahti", "Lappajärvi", "Lappeenranta", "Lapua", "Laukaa", "Lavia", "Lemi", "Lemland", "Lempäälä", "Leppävirta", "Lestijärvi", "Lieksa", "Lieto", "Liljendal", "Liminka", "Liperi", "Lohja", "Loimaa", "Loppi", "Loviisa", "Luhanka", "Lumijoki", "Lumparland", "Luoto", "Luumäki", "Luvia", "Länsi-Turunmaa", "Maalahti", "Maaninka", "Maarianhamina", "Marttila", "Masku", "Merijärvi", "Merikarvia", "Miehikkälä", "Mikkeli", "Muhos", "Multia", "Muonio", "Mustasaari", "Muurame", "Mynämäki", "Myrskylä", "Mäntsälä", "Mänttä-Vilppula", "Mäntyharju", "Naantali", "Nakkila", "Nastola", "Nilsiä", "Nivala", "Nokia", "Noormarkku", "Nousiainen", "Nummi-Pusula", "Nurmes", "Nurmijärvi", "Närpiö", "Oravainen", "Orimattila", "Oripää", "Orivesi", "Oulainen", "Oulu", "Oulunsalo", "Outokumpu", "Padasjoki", "Paimio", "Paltamo", "Parikkala", "Parkano", "Pedersören kunta", "Pelkosenniemi", "Pello", "Perho", "Pernaja", "Pertunmaa", "Petäjävesi", "Pieksämäki", "Pielavesi", "Pietarsaari", "Pihtipudas", "Pirkkala", "Polvijärvi", "Pomarkku", "Pori", "Pornainen", "Porvoo", "Posio", "Pudasjärvi", "Pukkila", "Punkaharju", "Punkalaidun", "Puolanka", "Puumala", "Pyhtää", "Pyhäjoki", "Pyhäjärvi", "Pyhäntä", "Pyhäranta", "Pälkäne", "Pöytyä", "Raahe", "Raasepori", "Raisio", "Rantasalmi", "Ranua", "Rauma", "Rautalampi", "Rautavaara", "Rautjärvi", "Reisjärvi", "Riihimäki", "Ristiina", "Ristijärvi", "Rovaniemi", "Ruokolahti", "Ruotsinpyhtää", "Ruovesi", "Rusko", "Rääkkylä", "Saarijärvi", "Salla", "Salo", "Saltvik", "Sastamala", "Sauvo", "Savitaipale", "Savonlinna", "Savukoski", "Seinäjoki", "Sievi", "Siikainen", "Siikajoki", "Siikalatva", "Siilinjärvi", "Simo", "Sipoo", "Siuntio", "Sodankylä", "Soini", "Somero", "Sonkajärvi", "Sotkamo", "Sottunga", "Sulkava", "Sund", "Suomenniemi", "Suomussalmi", "Suonenjoki", "Sysmä", "Säkylä", "Taipalsaari", "Taivalkoski", "Taivassalo", "Tammela", "Tampere", "Tarvasjoki", "Tervo", "Tervola", "Teuva", "Tohmajärvi", "Toholampi", "Toivakka", "Tornio", "Turku", "Tuusniemi", "Tuusula", "Tyrnävä", "Töysä", "Ulvila", "Urjala", "Utajärvi", "Utsjoki", "Uurainen", "Uusikaarlepyy", "Uusikaupunki", "Vaala", "Vaasa", "Valkeakoski", "Valtimo", "Vantaa", "Varkaus", "Varpaisjärvi", "Vehmaa", "Vesanto", "Vesilahti", "Veteli", "Vieremä", "Vihanti", "Vihti", "Viitasaari", "Vimpeli", "Virolahti", "Virrat", "Vårdö", "Vähäkyrö", "Vöyri-Maksamaa", "Yli-Ii", "Ylitornio", "Ylivieska", "Ylämaa", "Ylöjärvi", "Ypäjä", "Ähtäri", "Äänekoski",); foreach ($paikat as $key=>$value) { if (strpos(strtolower($value), $q) !== false) { echo "$value|$key\n"; } } ?>
Aihe on jo aika vanha, joten et voi enää vastata siihen.