01. november 2004 - 23:58Der er
10 kommentarer og 1 løsning
Søge by fra Postnummer (Australien)
Hi,
Jeg har et lille (stort) problem, i Australien har de som i DK postnumre, men her kan der vaere en hel del byer med det samme postnummer, saa hvad jeg mangler er en smart maade hvor en bruger indtaster et postnummer hvorefter der skal komme en "dropdown list" med bynavne under det postnummer, hvor brugeren vaelger d=byen ud fra listen.
nu gider jeg ikke sidde og plotte alle postnumre og byer ind, men teoretisk set kunne det se sådan ud: var postnumre = new Array(); postnumre["8200"] = ["Sydney","Grenå","Melbourne"]; postnumre["8400"] = ["Alice Spring","Perth","Odense"]; postnumre["8600"] = ["Sydney igen","Sydney for tredje gang"];
function findByer(pnummer,selbox) { if (postnumre[pnummer]) { rydSelectBox(selbox); byer = postnumre[pnummer]; for (i=0;i<byer.length;i++) { selbox.options[i] = new Option(byer[i],byer[i]); }
} } function rydSelectBox(selbox) { for (i=0;i<selbox.options.length;i++) { selbox.options[i] = null; } }
hey, faktisk kan det ordnes noget bedre: var postnumre = new Array(); postnumre["8200"] = ["Sydney","Grenå","Melbourne"]; postnumre["8400"] = ["Alice Spring","Perth","Odense"]; postnumre["8600"] = ["Sydney igen","Sydney for tredje gang"];
function findByer(pnummer,selbox) { selbox.length = 0; if (postnumre[pnummer]) {
byer = postnumre[pnummer]; for (i=0;i<byer.length;i++) { selbox.options[i] = new Option(byer[i],byer[i]); }
} }
Så behøver man heller ikke rydSelectBox() funktionen
Ser ud til du er ekspert, jeg har rodet rundt med det her et stykke tid, og du kommer op med en loesning saa hurtigt, jeg har all postnumrene i en database, saa jeg vil bare lave et array som du foreslaar, er det muligt ogsaa at faa staten med automatisk, min database har foelgende felter, Postnummer: By: State:
Så kunne man gøre sådan her: var postnumre = new Array(); postnumre["8200"] = ["Stat1","Sydney","Grenå","Melbourne"]; postnumre["8400"] = ["Stat2","Alice Spring","Perth","Odense"]; postnumre["8600"] = ["Stat3","Sydney igen","Sydney for tredje gang"];
function findByer(pnummer,selboxByer,selboxState) { selboxByer.length = selboxState.length = 0;
if (postnumre[pnummer]) { byer = postnumre[pnummer]; selboxState.options[0] = new Option(byer[0],byer[0]); for (i=1;i<byer.length;i++) { selboxByer.options[i-1] = new Option(byer[i],byer[i]); } } // Hvis postnummeret ikke er fundet regenerer stater else { genererStater(selboxState); } }
function genererStater(selbox) { for (i in postnumre) { selbox.options[selbox.length] = new Option(postnumre[i][0],postnumre[i][0]); } }
<body onload="genererStater(document.form1.state);"> <form name="form1"> <input type="text" name="postnummer" onblur="findByer(this.value,this.form.byer,this.form.state);" /> <select name="byer"> <option selected="selected">---</option> </select> <select name="state"> </select> </form> ------- <body onload="genererStater(document.form1.state);"> er ikke nødvendig hvis du alligevel bruger et serverside-sprog til at generere den med.
hvis det skal være rigtig advanceret, kan du også tilføje en ekstra lille feature, så staten og postnumrene automatisk opdateres hvis man stiller på dem. Altså hvis man vælger en ny stat sætter den også postnummeret og finder de tilgengældelige byer:
var postnumre = new Array(); postnumre["8200"] = ["Stat1","Sydney","Grenå","Melbourne"]; postnumre["8400"] = ["Stat2","Alice Spring","Perth","Odense"]; postnumre["8600"] = ["Stat3","Sydney igen","Sydney for tredje gang"];
function findByer(pnummer,selboxByer,selboxState) { selboxByer.length = 0;
if (postnumre[pnummer]) { byer = postnumre[pnummer]; for (i=1;i<byer.length;i++) { selboxByer.options[i-1] = new Option(byer[i],byer[i]); }
for (i=0;i<selboxState.length;i++) { if (selboxState.options[i].value == postnumre[pnummer][0]) { selboxState.options[i].selected = true; } } } }
function genererStater(selbox) { for (i in postnumre) { selbox.options[selbox.length] = new Option(postnumre[i][0],postnumre[i][0]); } }
function changeState(selbox,txtbox,selboxByer) { var pN = 0; for (i in postnumre) { if (postnumre[i][0] == selbox.value) {pN = i;} } if (pN) { txtbox.value = pN; findByer(pN,selboxByer,selbox); } }
Igen er det muligt du kan udelade - og nu også slette - genererStater(), hvis du har mulighed for automatisk at generere dem via php eller asp (eller hvad du nu bruger)
du behøver selvfølgelig ikke at bruge disse funktionaliteter, men sad bare og tænkte det kunne (måske) være smart. Så får du i hvert fald noget for de 100 point ;-)
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.