22. januar 2003 - 00:04
Der er
5 kommentarer og
3 løsninger
Automatisk bynavn ud fra postnr
Jeg har 2 arrays, der henholdsvis indeholder danske postnumre (ArrPost) og bynavne (ArrBynavne). Disse arrays er initieret med værdier fra en database ved hjælp af getRows().
if(!rs_post.EOF){
var ArrPost = rs_post.getRows();
ArrPost = ArrPost.toArray();
}
if(!rs_bynavn.EOF){
var ArrBynavn = rs_bynavn.getRows();
ArrBynavn = ArrBynavn.toArray();
}
Dette sker "serverside".
Det jeg ønsker mig, er at lave en form, hvor brugeren indtaster postnummer i et "input" og derefter bliver bynavnet automatisk indsat i et andet input via de 2 arrays.
Hvordan kan det lade sig gøre?
Jeg har forsøgt noget i stil med dette:
---klip---------------------
<script type="text/javascript" LANGUAGE="javascript">
<!--
function findBy(postnr) {
Kode der kontrollerer om findby.postnr.value findes i ArrPost og derefter returnerer værdien fra ArrBynavn med samme index.
}
//-->
</script>
<form name="findby" action="findby.asp" method="post">
Postnr.: <input type="text" name ="postnr" id="postnr" size="2" onChange="findBy(this.value,1);" maxlength="4">
By : <input type="text" name ="bynavn" id="bynavn" size="30">
</form>
---klip---------------------
Problemet er at jeg tilsyneladende ikke kan komme til at arbejde på de 2 arrays "clientside".
22. januar 2003 - 00:33
#1
Hvis du direkte ønsker at arbejde med de 2 arrays client-side, kommer du til at lade server-side koden generere og sende den JavaScript-kode der skal til, for at få oprettet og initialiseret dem i browseren. Det indbefatter selvsagt den samlede datamængde, men så kan det også lade sig gøre.
22. januar 2003 - 00:36
#3
jeg lavede engang følgende kode:
function zip2city(iZipcode) {
zipcodes = new Array('2600', '2605', '2610', '2620', '2625', '2630', '2635', '2640', '2650', '2660', '2665', '2670', '2680', '2690', '2730', '2750', '2770', '2860', '3400');
cities = new Array( 'Glostrup','Brøndby','Rødovre','Albertslund','Vallensbæk','Taastrup','Ishøj','Hedehusene','Hvidovre','Brøndby Strand','Vallensbæk Strand','Greve','Solrød Strand','Karlslunde','Herlev','Ballerup','Kastrup','Søborg','Køge');
for (var i=0;i<zipcodes.length;i++) {
if (iZipcode == zipcodes[i]) {
document.newuser.city.value = cities[i];
return;
}
}
}
hvis du blot får udskrevet alle postnumre, og bynavne til et Array i Javascript, så er det ligetil :)
Kan desværre ikke hjælpe ret meget mere lige nu, da jeg skal tidligt op i morgen :/
Sov godt når I kommer så langt :)
22. januar 2003 - 02:24
#6
<ole>
Begge løsninger bliver temmelig tunge. Når man kommer op på JS-arrays i den størrelse, er blot et mellemrum eller bogstav i hvert element af stor betydning for størrelsen af koden.
Spørgsmålet var oppe for en tid siden, hvor det blev dikuteret en del. Du kan læse tråden her:
http://www.eksperten.dk/spm/187815At data fra en database, hvergang en bruger request'er siden ville være helt hen i vejret ... ikke mindst, hvis der er tale om en Access-database. Det er under alle omstændigheder langt mere effektivt at basere løsningen på en statisk fil, som omtalt i ovennævnte tråd.
Det omtalte site er ikke oppe for tiden, men filen kan downloades på denne adresse:
http://tjenester.dk/x-codes.dk/eksperten/postnumre/dk_pns.js/mvh
</bole>
22. januar 2003 - 02:40
#7
HTML'en kan du få her - taget fra en løsning, jeg selv lavede på et tidspunkt:
<script type="text/JavaScript" src="dk_pns.js"></script>
<script type="text/JavaScript">
function setAddr(inp, f) {
var addr = eval('pn.p'+inp.value);
if ((!addr || addr==null || addr=="undefined") && inp.value!="") {
alert("Forkert postnummer");
inp.select();
return false;
} else if (inp.value!="") {
f.by_navn.value = addr;
}
}
</script>
<form>
<table>
<tr>
<td>Postnr:</td>
<td>Bynavn:</td>
</tr>
<tr>
<td><input type="text" name="postnr" style="width:40px;"
onblur="setAddr(this, this.form);" value=""></td>
<td><input type="text" name="by_navn" value=""></td>
</tr>
</table>
</form>
/mvh