webForumDet fria alternativet

Livesökning för flera fält?

JavaScript

6 svar · 858 visningar · startad av bassebhu

Medlem sedan nov. 20016 480 inlägg
Frågan#1

Hallå!

Jag har lyckats att få en livesökning att fungera på ett textfält, men utöver det har jag även två selectboxar som jag skulle vilja skickar sina värden. Problemet jag har är att jag med min kod bara får iväg ett värde i taget. Jag vill att när man trycker på en tangent i textfältet eller uppdaterar en selectbox så skickas samtliga aktuella värden från formuläret.

Detta har jag just nu:

function getdata(str)
{
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("get-data").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","index.php?getdata&kw="+str,true);
xmlhttp.send();
}

<input type="text" id="kw" name="kw" value="<?php echo get_value('kw'); ?>" onkeyup="getdata(this.value)" />
<select id="select1" name="select1" onchange="getdata(this.value)">...
<select id="select2" name="select2" onchange="getdata(this.value)">...

<div id="get-data">Div som uppdateras</div>

Jag behöver alltså ändra mitt this.value till att den skickar hela formulärets values, samt ändra så att str blir en array gissar jag och open-länken får tre variabler i sin querystring i stället för en (kw, select1, select2)?

Finns det ännu smartare lösningar kom gärna med förslag! Hilfe, tack! :e

Bästa hälsningar,
Basse

Medlem sedan nov. 20016 480 inlägg
#2

Och en sak till som jag kom på. När min div har uppdaterats med nytt resultat så dyker det upp länkar. Om man klickar på en och sedan använder webbläsarens bakåtknapp så står sökorden kvar i textfältet, men resultatet är det som motsvarar ett tomt textfält. Jag testade hur google gör och om man har sökt på någonting, klickat sig iväg och sedan trycker bakåt i webbläsaren tillbaka till google så har den lagt på söksträngen i url-fältet och rätt resultat visas på sidan. Hur gör man det? Är det krångligt? :D Tack igen!

Medlem sedan mars 2006296 inlägg
#3

Något så här då kanske? Skickar en alert just nu men du förstår säkert poängen. Var det så här du menade annars?
http://jsbin.com/ihuqof/

Nu är det här bara svar på första inlägget...

Medlem sedan nov. 20016 480 inlägg
#4

Sweet, funkade precis som jag ville, tack! :D

Nu återstår bara den andra frågan. Går det att lassa på en querystring om man trycker bakåt i webbläsaren? Eller går gör det ju uppenbarligen eftersom google funkar så, men är det sjukt krångligt?

Tack för tips!

Medlem sedan juni 20019 519 inlägg
#5

Kolla history i HTML5: https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history och för alla HTML4 webbläsare sök efter pushstate polyfills ;)

Medlem sedan nov. 20016 480 inlägg
#6

Tack, har läst igenom ett par gånger, meeen behöver nog lite tips om hur jag börjar :)

Jag använder nu följande JS, men när man skriver nåt i textfältet eller uppdaterar en selectbox så skulle jag samtidigt vilja uppdatera adressfältet med querystringen. Om det går, räcker det sedan för att adressen ska vara densamma efter att man klickat iväg och sedan tillbaka?

function getdata() {
  
  var select1 = document.getElementById("select1").value,
      select2 = document.getElementById("select2").value,
      search  = document.getElementById("kw").value;
  
  if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
  } else {
    // code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  
  xmlhttp.onreadystatechange = function() {
    
    if( xmlhttp.readyState == 4 && xmlhttp.status == 200 ) {
      document.getElementById("get-data").innerHTML = xmlhttp.responseText;
    }
  };
  
  // Sätt ihop query
  var querystring = "getdata=&kw=" + search + "&select1=" + select1 + "&select2=" + select2;
  
  // Testar med en Alert
  alert('query: ' + querystring);
  //xmlhttp.open("GET","index.php?" + querystring, true);
  //xmlhttp.send();
 
}
Medlem sedan juni 20019 519 inlägg
#7

du få ju uppdatera historyn samtidigt som du skickar ditt innehåll och ha en metod som kan återkalla det när du gå tillbaka i historyn (antingen spara du det som en Querystring ihop med url:en eller så kan du infoga det i din pushstate:

history.pushState(querystring, "", "index.php");

allt bli enklare med jquery ( https://gist.github.com/854622 ) om du nu skall ha stöd för äldre webbläsare så är det tillräcklig bra polyfil för det.

263 ms totalt · 3 externa anrop · v20260731065814-full.a4a6ad0e
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)