Avatar billede wordwrap Nybegynder
13. maj 2005 - 13:54 Der er 14 kommentarer og
1 løsning

udskriv de valgte enheder fra select, og udregn pris

Hejsa

Tror lige vi må starte med en advarsel... js er slet ik mig...så tingene skal nok skærres godt ud i pap :D

Har en side, som ved hjælp af php finder frem til hvor mange grupper (= select bokse) der skal skrives ud, og finder indholdet af dem.

Det jeg så gerne nu skal bruge er noget js som kan udskrive de valgte ting fra hver select (hvis den er valgt self.), og udregne en samlet pris på de valgte enheder.

grupperne som afgør antalet af select bokse.. er angivet med tal 1 - ??


på forhånd tak

/strange
Avatar billede roenving Novice
13. maj 2005 - 14:14 #1
Hvordan kender man prisen på de valgte i select-boksene ?-)

-- og hvordan er navngivningen af select-boksene ?o]
Avatar billede wordwrap Nybegynder
13. maj 2005 - 14:23 #2
navne er gruppe id´et dvs... 1 - xx

prisen har jeg i en variabel (php)
Avatar billede roenving Novice
13. maj 2005 - 14:45 #3
Er navnene et tal ?-)

-- og hvis du har værdierne i php skal de jo overføres til en javascript-variabel, men det kunne laves lettere, hvis værdien var angivet i value på options, f.eks.

<form>
<select name="vare1" onchange="visPris(this);">
  <option value="">Vælg vare</option>
  <option value="vare1|22.75">Vare 1</option>
  <option value="vare1|222.75">Vare 2</option>
</select><br>
<input name="SamletPris"><br>
<input type="submit">
</form>

-- og en script-blok:

<script type="text/javascript">
function visPris(elm){
  var f = elm.form;
  var sels = f.getElementsByTagName("SELECT");
  var samlet = 0;
  for(i=0;sels.length>i;i++){
    if(sels[i].value.match(/^\d+(\.\d+)?$/))
      samlet += +sels[i].value;
  }
  f.SamletPris.value = samlet;
}
</script>
Avatar billede roenving Novice
13. maj 2005 - 14:48 #4
Hov, en blunder:

<form>
<select name="vare1" onchange="visPris(this);">
  <option value="">Vælg vare</option>
  <option value="vare1|22.75">Vare 1</option>
  <option value="vare1|222.75">Vare 2</option>
</select><br>
<select name="vare2" onchange="visPris(this);">
  <option value="">Vælg vare</option>
  <option value="vare3|200">Vare 1</option>
  <option value="vare4|32.75">Vare 2</option>
</select><br>
<input name="SamletPris"><br>
<input type="submit">
</form>

-- og en script-blok:

<script type="text/javascript">
function visPris(elm){
  var f = elm.form;
  var sels = f.getElementsByTagName("SELECT");
  var samlet = 0;
  for(i=0;sels.length>i;i++){
    if(sels[i].value.match(/\d+(\.\d+)?$/))
      samlet += +sels[i].value.split("|")[1];
  }
  f.SamletPris.value = samlet;
}
</script>
Avatar billede wordwrap Nybegynder
13. maj 2005 - 15:47 #5
ja pt er navnene et tal... men det kan nu ret nemt ændres...

koden du har skrevet ser os ud til at virke ok.. så længe jeg ikke har den på den side... men bortset fra det, er vi inde på noget af det rigtige.

så vidt jeg lige kan se, så blir den samletpris kun udskrevet så længe feltet SamletPris er inde for den samme form som select boksne.

Skal gerne havde den samlet pris skrevet ud uden for formen ??+
Avatar billede roenving Novice
13. maj 2005 - 15:58 #6
Så adresserer du bare anderledes i sidste linje, f.eks.

  document.getElementById("SamletPris").innerHTML = samlet;

-- og bruger id til feltet:

Samlet pris: <span id="SamletPris">0<span>&nbsp;kr.
Avatar billede wordwrap Nybegynder
13. maj 2005 - 16:07 #7
nice :D

nu ligner det noget...

mangler så bare den lille ting, teksten fra de valgte ting også skal skrives ud...

der er så den lille tricky ting.. at der i nogle select bokse er valgt en standard vare... dvs.. at de varer skal udskrives fra starten, inden der vælges noget fra select boksene..

går ud fra det ville være muligt at genbruge noget af den tidligere kode..

hvor der så blev lavet en variabel mere.. og den blev lavet ud fra:
samlet += +sels[i].value.split("|")[1]; som blev lavet om til noget lign: vare += +sels[i].value.split("|")[0]; ???

vare, skal så nok være et array, som bliver løbet igennem når det skal udskrives.. er det noget der kan lade sig gøre, og hehe... hvordan :s
Avatar billede wordwrap Nybegynder
13. maj 2005 - 16:55 #8
er pt kommet frem til følgende:
function visPris(elm){
  var f = elm.form;
  var sels = f.getElementsByTagName("SELECT");
  var samlet = 0;
  var varer = new Array;
  for(i=0;sels.length>i;i++){
    if(sels[i].value.match(/\d+(\.\d+)?$/))
      samlet += +sels[i].value.split("|")[1];
      varer[i] = sels[i].value.split("|")[0] + "<br>";
  }
  document.getElementById("SamletPris").innerHTML = samlet;
  document.getElementById("allevarer").innerHTML = varer;

}

virker ok... skal lige ha kigget lidt på den + "<br>" ting.. da det ik er optimalt.. men får da skrevet de valgte varer ud..

der må os være en måde at afgøre hvor langt det array er... når det bliver skrevet ud nu... slutter det med en del "," det må jo kunne undgåes på en eller anden måde ??

problemet der er tilbage pt er så, de varer der som standard er valgt.. stadig skal skrives ud, når siden åbnes første gang.. kan det klares med en funtion af en slags, som ligges ind i <body onload=""> ??
Avatar billede roenving Novice
13. maj 2005 - 17:00 #9
Brug .join()-funktionen på arrays !-)

  document.getElementById("allevarer").innerHTML = varer.join();

-- og hvis du vil have kommaet imellem: .join(",");
Avatar billede wordwrap Nybegynder
13. maj 2005 - 20:02 #10
kan ikke se den store forskel på om jeg bruger join().

de "," bliver stadig skrevet med ud..

er det ikke på en måde muligt at sende det fulde array ud, og senere der hvor det skal benyttes, udskrive med en for-løkke ?? med return eller noget i den stil ??
Avatar billede roenving Novice
14. maj 2005 - 08:24 #11
Hrm ...

Det ser ud til at du altid skal angive en værdi, som der joines med, så .join(""); !-)

Prøv f.eks. denne:

<script type="text/javascript">
var varer = ["Vare 1<br>","Vare 2<br>","Vare 3<br>","Vare 4<br>","Vare 5<br>"];
window.onload = function(){
  document.getElementById("minDiv").innerHTML = varer.join("");
}
</script>
<div id="minDiv"></div>
Avatar billede wordwrap Nybegynder
17. maj 2005 - 08:49 #12
Så virker det bare :D (den del af det ihvertfald...)

hvis det ik er for meget og be om... kan den function så udvides så den også tager valgte checkboxe med ??

men ellers smid et svar (hvis du da samler på point ;-) syns jeg kan mindes lidt om at du normalt ik gør)
Avatar billede roenving Novice
17. maj 2005 - 09:13 #13
Tjah, for ligesom du kan hente alle select-bokse, kan vi jo også hente alle inputs og teste dem for, om de har type checkbox og er checked:

  var e = f.elements;
  for(i=0;i<e.length;i++){
    if(e.type=="checkbox"&&e.checked){
      //det samme som med selecterne !-)
    }
  }

-- og du har nok forvekslet mig med en anden, eller stødt ind i een af de gange, jeg har bedt om at få færre end 200 point !o]

Velbekomme ;~}
Avatar billede wordwrap Nybegynder
17. maj 2005 - 09:24 #14
takker :D

og tjaaa... kan jo ske jeg har forvekslet dig med en anden... who knows.. men tak for hjælpen
Avatar billede roenving Novice
17. maj 2005 - 11:16 #15
-- og jeg takker for 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