Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

AJAX Suggestions search box / PHP/MySql

[es] :: Javascript i AJAX :: AJAX Suggestions search box / PHP/MySql

[ Pregleda: 1350 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

duchess
Ivana Petrovic
In the middle of nowhere.

Član broj: 142670
Poruke: 132
*.adsl-2.sezampro.yu.

Sajt: ivona.stens-turs.com


Profil

icon AJAX Suggestions search box / PHP/MySql18.12.2008. u 15:11 - pre 186 meseci
Zdravo!

Napravih jednu mini skripticu za auto suggest na textboxu za pretragu.
Sve sto ta skripta radi jeste da mi ispod textboxa izbaci listu pojmova koji sadrze ukucanu rec. E sad, moj cilj je bio da napravim skriptu neku slicnu kao npr na Google ili Amazonu. Jer kod mene ne moze da se ide strelicama gore dole kroz suggestions jer je to samo jedan <div id="deo"></div>. evo da ne bunim ni vas ni mene:

imam jednu formu na stranici
Code:

<form method="post">

        <input name="keyword" type="text" id="keyword" value="" onkeyup="showHint(this.value)"  />
        <input class="button" type="submit" name="Search" value="Trazi" />
        <span id="txtHint"></span>

</form>


iznad toga mi se nalazi javascript:

Code:

<script type="text/javascript" >
var xmlHttp;

function showHint(str)
{
if (str.length==0)
  { 
  document.getElementById("txtHint").innerHTML="";
  return;
  }
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
  {
  alert ("Browser does not support HTTP Request");
  return;
  } 
var url="plugins/content/livesearch.php";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);


function stateChanged() 

if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
 { 
 document.getElementById("txtHint").innerHTML=xmlHttp.responseText;
 } 
}

function GetXmlHttpObject()
{
var xmlHttp=null;
try
 {
 // Firefox, Opera 8.0+, Safari
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 // Internet Explorer
 try
  {
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
 catch (e)
  {
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
return xmlHttp;
}

function setPresetValue(clazz) 
{
    var classField = document.getElementById("keyword");
    classField.value = clazz;
    classField.focus();
}


</script>


kao sto vidite java script poziva php stranicu livesearch.php u kojoj se nalazi sledece:

Code:

$select_info  = "SELECT product_sales as sales, product_name FROM product WHERE product_sales > 0 ORDER BY sales DESC, product_name "; 
$select_info_rez=mysql_query($select_info) or die("Greska: ".mysql_error());
$select_info_broj=mysql_num_rows($select_info_rez);
if($select_info_broj)
{
    
    $a="";
    $r=0;
    while($select_info_broj>$r)
    {
        $naziv_art=mysql_result($select_info_rez,$r,'product_name');
                
                $a[]=$naziv_art;
                $b[]='<a href=# onclick="setPresetValue('.$naziv_art.');">';

        $r++;
    }
}

//get the q parameter from URL
$q=$_GET["q"];
echo '<ul>';
//lookup all hints from array if length of q>0
if (strlen($q) > 2)
{
$hint="";
for($i=0; $i<count($a); $i++)
  {
  if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))) || strstr($a[$i],$q))
    {
    if ($hint=="")
      {
      $hint=$b[$i].$a[$i]."</a>";
      }
    else
      {
      $hint=$hint.$b[$i].$a[$i]."</a>";
      }
    }
  }
}

if ($hint !== "")
{
$response=$hint;
}

//output the response
echo "<li>".$response."</li>";
echo "</ul>";



i sve on lepo izbacuje rezultate(suggestions) ali kad kliknem na neki rezultat trebalo bi da to sto sam kliknula upise u textbox, a nista se ne desi. Takodje me zanima kako da napravim efekat dropdown liste, da mogu strelicama na tastaturi izabrati zeljeni rezultat/predlog/suggestion?

Hvala!


Listen very carefully, I shall say this only once!
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: AJAX Suggestions search box / PHP/MySql18.12.2008. u 17:19 - pre 186 meseci
Probaj set-ovanje tog niza $b da napishesh ovako:
Code:

$b[] = '<a href = "#" onclick = "setPresetValue(\''.$naziv_art.'\');">';

Pre i posle te tarabe (#) su ti falili dvostruku navodnici, mada to i nije tol'ko bitno. Ali mislim da je problem pravilo to shto ti toj funkciji setPresetValue() hocesh da prosledish string, a ti si u svom kodu taj argument prosledila bez otvorenih znakova navoda. Kad bi pogledala source te strane taj deo koda bi izgledao ovako nekako: <a href = "#" onclick = "setPresetValue(neki_naziv)>, a pravilno bi bilo ovako: <a href = "#" onclick = "setPresetValue('neki_naziv')>, odnosno taj argument "neki_naziv" treba da bude izmedju jednostrukih navodnika.
 
Odgovor na temu

duchess
Ivana Petrovic
In the middle of nowhere.

Član broj: 142670
Poruke: 132
*.adsl-2.sezampro.yu.

Sajt: ivona.stens-turs.com


Profil

icon Re: AJAX Suggestions search box / PHP/MySql19.12.2008. u 09:30 - pre 186 meseci
Da to je bio problem! Hvala ti puno na odgovoru!
A jel imas ideju kako da se napravi efekat dropdown liste? Da kad iskoce suggestions da moze strelicama na tastaturi da se biraju, kao i na google-u?
Listen very carefully, I shall say this only once!
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-3.sezampro.yu.



+33 Profil

icon Re: AJAX Suggestions search box / PHP/MySql19.12.2008. u 11:11 - pre 186 meseci
Nema na chemu...

Pa razmishljao sam o tome, i mogu ti reci da to nije tako jednostavan "zahvat". :) Za taj tvoj sluchaj, ti bi trebala da umesto tog ispisa u vidu liste (<li>, </li>), sve te linkove ispisujesh u span-ovima (<span>, </span>), i da svakom tom tag-u span dodelish atribut tabIndex = "0". Time cesh omogucati da taj element mozhe da se "fokusira".

E sad, za svaki taj span bi trebao da ide i dogadjaj onkeyup, poshto ti je cilj da tastaturom birash te linkove. Taj dogadjaj bi pozivao neku funkciju, koja se npr. zove test, i to ovako nekako: onkeyup = test;. Deklaracija te funkcije u javascript-u bi izgledala npr. ovako:
Code:

function test(event){
   var taster = 0;

   //utvrdjivanje koji je taster pritisnut
   if (window.event) { //ako je iskoriscen window.event objekat
      taster = window.event.keyCode;
   } 
   else if (event) { //ako je iskoriscen event objekat
      key = event.keyCode;
   }

   if (key == 13) { //ako je pritisnuto ENTER
     
       //neki kod

   }
   else if (keyCode == UP){ //ako je pritisnuta strelica za gore 

       //neki kod

   }
   else if (keyCode == DOWN) { //ako je pritisnuta strelica za dole

       //neki kod

  }
}


Ovi dogadjaji delovi za "UP" i "DOWN" bi ti sluzgili samo "kozmetike" radi, odnosno, u njima bi bio kod koji bi, kada se npr. pritisne UP bojio span iznad njega nekom bojom, a takodje bi radio i fokusiranje na span iznad njega (npr. span_3.focus()).

Stvarno ne znam dal' ovo mozhe ovako... Verovatno i u biblioteci jQuery imaju neke gotove funkcije uz pomoc kojih ovo mozhe lakshe da se odradi, ali sa tim stvarno nemam iskustva... Valjda ce i Aleksandar Ruzhichic da vidi ovu temu, on sigurno ima neko reshenje... :)
 
Odgovor na temu

[es] :: Javascript i AJAX :: AJAX Suggestions search box / PHP/MySql

[ Pregleda: 1350 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.