14. november 2005 - 10:21Der er
9 kommentarer og 1 løsning
Udfyld et felt og få den til at hente det over i et andet felt
Hej eksperter, jeg har brug for et script der gør at når jeg har udfyldt <input type="text" name="postnr" maxlength="4" /> at den så henter fra databasen, og sætter det ind i <input type="text" name="by" readonly />, har bare brug for det script der skal trække noget ud, og hvordan det sætter ind.
Vil du have bynavnene liggende på klienten, eller vil du over på serveren for at hente bynavne i en database...?
En ren klientløsning ville i det mindste kræve at du sender alle bynavnene med over hver gang (eller i det mindste første gang, hvis du f.eks. putter dem i en separat js-fil og klienten eller cacher).
Hvis dit by-array har flg. format:
var postnrtabel = [['5000','Odense C'],['6000','Kolding'],['7000','Fredericia']];
så kunne du f.eks. lave en funktion (som du f.eks. placerer sammen med postnrtabellen) der bliver kaldt når postnr mister fokus (onblur):
function findBynavn(e, bykontrolnavn) { if(e) { var postnr = e.value; var byctl = e.form.elements[bykontrolnavn]; if(byctl) { for(var i=0; i < postnrtabel.length; i++) { if(postnrtabel[i][0] == postnr) { byctl.value = postnrtabel[i][1]; break; } } } } return true; }
På serveren skal du så finde bynavnet til det postnr som ligger i request.form("postnr"), under den forudsætning at request.form("submitmode") = "findBynavn"...
if submitmode = "findBynavn" then 'TODO: åben databasen 'TODO: find bynavnet til det postnr som ligger i request.form("postnr"), f.eks.: sql = "SELECT bynavn FROM postnrtabel WHERE postnr = '" & request.form("postnr") & "'" set rs = conn.execute(sql) if not rs.eof then bynavn = rs("bynavn") end if rs.close conn.close end if %> <form method="post"> <input type="hidden" name="submitmode" value="" /> <input type="text" name="postnr" maxlength="4" onchange="findBynavn()" value="<%=postnr%>" /> <input type="text" name="by" value="<%=bynavn%>" readonly /> </form>
Et objekt er laaaaangt hurtigere at søge i - og det bliver slankere end et multidimensionelt array:
var postnr = {p5000:"Odense C",p6000:"Kolding",p7000:"Fredericia"}; Så kan du kalde med:
function findBynavn(e, bykontrolnavn) { if(!e) return false; var key = "p" + e.value; var byctl = e.form.elements[bykontrolnavn]; if(!byctl) return false; byctl.value = postnr[key]; }
En anden vigtig ting er at forkorte alle forekomster af 'København' til 'Kbh' - og 'Frederiksberg' til 'Frb'. Det sparer rigtig mange bytes, når objektet skal downloades :)
Argh, jeg fokuserede bare på den ekstremt dårlige performance ,-(
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.