Avatar billede danishaussie Nybegynder
01. november 2004 - 23:58 Der 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.
Avatar billede skovenborg Nybegynder
02. november 2004 - 00:07 #1
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;
      }
  }


<form name="form1">
<input type="text" name="postnummer" onblur="findByer(this.value,this.form.byer);" />
<select name="byer">
<option selected="selected">---</option>
</select>
</form>
Avatar billede skovenborg Nybegynder
02. november 2004 - 00:13 #2
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
Avatar billede danishaussie Nybegynder
02. november 2004 - 00:56 #3
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:

hvad goer jeg for at du faar dine point ?
Avatar billede skovenborg Nybegynder
02. november 2004 - 17:57 #4
hvor skal staten sættes ind henne? I den samme select-box eller en ny?

For at du kan dele point ud skal jeg lige først have lavet et svar - sådan her ;-)
Avatar billede danishaussie Nybegynder
02. november 2004 - 21:57 #5
Staten er en ny select box, men naar brugeren selecter byen, skal staten komme op automatisk, saa jeg taenkte jeg maaske kan have den i arrayet
Avatar billede skovenborg Nybegynder
02. november 2004 - 22:20 #6
Tja, lige en lille oplysning mere:

Er der for hvert postnummer kun én stat - sådan at alle byerne for hvert postnummer altså har den samme stat?
Avatar billede danishaussie Nybegynder
02. november 2004 - 22:29 #7
ja der kan kun vaere en stat
Avatar billede skovenborg Nybegynder
02. november 2004 - 22:33 #8
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.
Avatar billede danishaussie Nybegynder
02. november 2004 - 22:36 #9
Mange tak skal du have, du er en champion.....
Avatar billede skovenborg Nybegynder
02. november 2004 - 22:47 #10
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);
      }
  }

<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" onchange="changeState(this,this.form.postnummer,this.form.byer);">
</select>
</form>

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)
Avatar billede skovenborg Nybegynder
02. november 2004 - 22:50 #11
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 ;-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester