06. april 2002 - 00:10Der er
23 kommentarer og 1 løsning
Array
Hej
Jeg har et array indeholdende danske postnumre. Jeg ønsker at der i min <input type="text" name="omraade"> returneres value København Ø hvis der er indtastet e.g 2100 i min <input type="text" name="pstnr"> Hvordan gør man det?
du siger dit array indeholder postnumre. Hvis det ikke også samtidig indeholder områdenavne er det umuligt at lave det du ønsker.
men hvis dit array fx ser sådanher ud:
var ditArray = new Array( "4000|Roskilede", "1764|Kbh. V Bodilsgace", "2980|Kokkedal", "2990|Nivå" //... osv );
er det rimeligt nemt.
sørg for at arrayet er sorteret så de laveste (eller højeste, bare vi ved hvilke) postnumre står forrest
function findPostnr ( ) { // laveste først i arrayet. var streng = document.forms[0].pstnr.value +"|"; var forst = 0; var sidst = ditArray.length-1; var midt; while ( forst < sidst ) { midt = Math.round( (forst+sidst)/2 ); if ( ditArray[midt] > streng ) { sidst = midt; } else { forst = midt+1; } } midt = forst.split("|"); if ( midt[0] == postnr ) { // vi fandt det.
document.forms[0].område.value = midt[1]; } else { // ulovligt postnr (eller en fejl) alert( "prøv et andet postnummer" ); } }; //end findPostnr( )
<ole> Du starter med at hente denne fil, jeg har lavet med samtlige danske postnumre. De ligger så komprimeret, som de næsten kan og fylder kun omkring 21Kb: http://x-codes.dk/eksperten/postnumre/dk_pns.js
De er formateret som et objekt - og du kan tilgå numrene på følgende måde:
Objektet hedder 'pn' og alle postnumrene er så properties på dette objekt. Numrene har fået et 'p' foran, da JavaScript ikke kan lide rene numre som properties. pn.p2200 vil altså returnere 'Kbh N' - og 'pn.p6800' vil returnere 'Varde' /mvh
Synes godt om
Slettet bruger
06. april 2002 - 01:21#5
jakoba > Doh! Det indeholder naturligvis også områdenavne... Det har strukturen array[1000]='København K'; og så dernedad
Ok. men kik på oleboles svar. det er KLART at foretrække. dit array vil fx fylde 4*9000 = 36 Kilobyte blot til indexet. Og så skal strengene med områdenavne lægges oveni. Den bliver tung at loade.
(eller er det 8 * 9000?)
Synes godt om
Slettet bruger
06. april 2002 - 01:29#8
olebole > Nu har jeg taget *.js filen... Hvordan kommer jeg så videre? Ved godt at jeg kan inkludere den med <script type="text/JavaScript" src="dk_pns.js"></script> Men selve den del som bevirker at områdenavnet kommer som value i mit input felt, er jeg ikke med på :o)
Det skal bare komme inden dine andre funktioner - men man lægger det som regel mellem <head> og </head> for at være sikker på, alle JS-funktioner er indlæst, inden brugeren begynder at anvende dem ;o) /mvh
Synes godt om
Slettet bruger
06. april 2002 - 02:02#14
ole > Hmmmm... Jeg kan ikke få det til at virke! Jeg har inkluderet js filen, har indsat <script> function lookUp( ){ var streng = "p" +document.forms[0].postnummer.value; if ( pn[streng] ) { document.forms[0].bynavn.value = pn[streng]; } else { alert( "det postnummer findes ikke" ); } }; //end lookUp( ) </script> og indsat onblur=""lookUp(this);"" på feltet postnummer
Synes godt om
Slettet bruger
06. april 2002 - 02:03#15
de dobbelte "" er fordi det Response.Write's i asp :o)
... anytime ;o) Faktisk skal det da lige nævnes, at jakobas gentagne - og som oftest stædige - performance-tests var inspirationen til at se, hvor meget nikolajdus array kunne koges ned i spørgsmålet, jeg linkede til ovenfor ;o) /mvh
Synes godt om
Slettet bruger
06. april 2002 - 02:51#24
ole > Ja - det fornemmede man ;o)
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.