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
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!
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, 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();
}
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