Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: jQuery Autocomplete ja FlushCache?

amuse [04.12.2009 23:25:26]

#

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";
}
?>

amuse [06.12.2009 00:51:26]

#

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";
	}
}
?>

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta