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.
Efter ti år i London, Madrid, Paris og Utrecht kommer Sabios AI-fokuserede program af arrangementer om kundeoplevelser, ‘Disrupt’, for første gang til Danmark.
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.