Avatar billede leasing Nybegynder
18. juli 2005 - 13:50 Der er 21 kommentarer og
1 løsning

Tusindtalsseperator i et inputfelt

Jeg har en masse checkboxe hvor der er tilknyttet et tal som value. Når der bliver sat et flueben vil et bestemt inputfelt blive opdateret med det som der står i value. Alle tal i value plusses med hinanden.
Nu er det så at jeg gerne vil have en tusindtalsseperator på inputfeltet.

Hvordan gør jeg det?
Avatar billede roenving Novice
18. juli 2005 - 14:16 #1
Tjah, så får du jo problemer med at addere dem bagefter ...

-- men der var en, som fandt en simpel og genial løsning på et tidspunkt, finder den lige !-)
Avatar billede roenving Novice
18. juli 2005 - 14:30 #2
Jeg kunne ikke lige finde den, men f.eks. sådan !-)

<form>
1000000<input type="checkbox" value="1000000" onclick="this.form.tal.value=ins1000Sep(this.value);"><br>
1000000,15<input type="checkbox" value="1000000,15" onclick="this.form.tal.value=ins1000Sep(this.value);"><br>
Tal: <input type="text" name="tal"><br>
<button onclick="this.form.tal.value=rem1000Sep(this.form.tal.value);">Fjern tusind-separatorer</button>
<button onclick="this.form.tal.value=ins1000Sep(this.form.tal.value);">Indsæt tusind-separatorer</button>
</form>

<script type="text/javascript">
function ins1000Sep(val){
  val = val.split(",");
  val[0] = val[0].split("").reverse().join("");
  val[0] = val[0].replace(/(\d{3})/g,"$1.");
  val[0] = val[0].split("").reverse().join("");
  return val.join(",");
}
function rem1000Sep(val){
  return val.replace(/\./g,"");
}
</script>
Avatar billede leasing Nybegynder
18. juli 2005 - 14:54 #3
jeg bruger jo ingen knapper til at vise tal i tusindtal..det skal ske automatisk.

Jeg har brugt denne som test:

<form>
<input type="text" name="amount" value="0"><br>
200.000 <input type="checkbox" value="200000" onclick="this.form.amount.value=(this.checked)?+this.form.amount.value+ +this.value:+this.form.amount.value-(+this.value);"><br>
200.000 <input type="checkbox" value="200000" onclick="this.form.amount.value=(this.checked)?+this.form.amount.value+ +this.value:+this.form.amount.value-(+this.value);"><br>
200.000 <input type="checkbox" value="200000" onclick="this.form.amount.value=(this.checked)?+this.form.amount.value+ +this.value:+this.form.amount.value-(+this.value);"><br>
200.000 <input type="checkbox" value="200000" onclick="this.form.amount.value=(this.checked)?+this.form.amount.value+ +this.value:+this.form.amount.value-(+this.value);"><br>
200.000 <input type="checkbox" value="200000" onclick="this.form.amount.value=(this.checked)?+this.form.amount.value+ +this.value:+this.form.amount.value-(+this.value);"><br>
200.000 <input type="checkbox" value="200000" onclick="this.form.amount.value=(this.checked)?+this.form.amount.value+ +this.value:+this.form.amount.value-(+this.value);"><br>
200.000 <input type="checkbox" value="200000" onclick="this.form.amount.value=(this.checked)?+this.form.amount.value+ +this.value:+this.form.amount.value-(+this.value);"><br>
200.000 <input type="checkbox" value="200000" onclick="this.form.amount.value=(this.checked)?+this.form.amount.value+ +this.value:+this.form.amount.value-(+this.value);"><br>
200.000 <input type="checkbox" value="200000" onclick="this.form.amount.value=(this.checked)?+this.form.amount.value+ +this.value:+this.form.amount.value-(+this.value);"><br>
</form>

Kan du indarbejde det i denne?
Avatar billede roenving Novice
18. juli 2005 - 15:02 #4
Det var også bare for at vise hvordan du kunne fjerne dem, når du skulle addere tallene ...

200.000 <input type="checkbox" value="200000" onclick="this.form.amount.value=(this.checked)?ins1000Sep(''+(+this.form.amount.value+ +this.value)):ins1000Sep(''+(+rem1000Sep(this.form.amount.value)-this.value);"><br>

-- ganske utestet !-)
Avatar billede leasing Nybegynder
18. juli 2005 - 15:08 #5
Der sker ingenting når jeg benytter ovennævnte input...der vises heller ikke noget tal.
Avatar billede roenving Novice
18. juli 2005 - 15:09 #6
Har du ikke indsat script-blokken ?-)
Avatar billede leasing Nybegynder
18. juli 2005 - 15:10 #7
jo det har jeg...virker det ved dig?
Avatar billede roenving Novice
18. juli 2005 - 15:55 #8
-- som nævnt ganske utestet, men det var også mere for at give dig ideen, men jeg havde ikke forestillet mig, at du skulle bruge flere, og så er der vel sket det, at du får en javascript-fejl (måske kun en gul advarselstrekant nede i hjørnet !-)

Sådan:

200.000 <input type="checkbox" value="200000" onclick="this.form.amount.value=this.checked?ins1000Sep(''+(+rem1000Sep(this.form.amount.value)+ +this.value)):ins1000Sep(''+(+rem1000Sep(this.form.amount.value)-this.value));"><br>
Avatar billede leasing Nybegynder
18. juli 2005 - 15:58 #9
Det er da skide godt, men kan man fjerne den tusindtalsseperator der er som det første (eks. .400.000) så tallene ser rigtige ud?
Avatar billede roenving Novice
18. juli 2005 - 16:03 #10
Den fylder jo ikke meget, så jeg havde overset den !-)

Sådan:

function ins1000Sep(val){
  val = val.split(",");
  val[0] = val[0].split("").reverse().join("");
  val[0] = val[0].replace(/(\d{3})/g,"$1.");
  val[0] = val[0].split("").reverse().join("").replace(/^\./,"");
  return val.join(",");
}

-- els velbekomme '-)
Avatar billede leasing Nybegynder
19. juli 2005 - 09:32 #11
Nu da jeg har kopieret det ind i det rigtige script får jeg fejl (gul advarselstrekant). Jeg kan ikke lige se mig ud af fejlen da javascript ikke lige er min stærke side.

Jeg har dog behov for en funktion mere...måske du lige ved hvad der skal til. Jeg får en værdi fra databasen eks. 30.000.000 kr. Alle mine checkboxe har en værdi som bliver summeret i feltet amount (som ovenover i koden). Kan man gøre det sådan, at en knap automatisk disables når den opsummerede værdi overstiger værdien fra database?
Avatar billede leasing Nybegynder
19. juli 2005 - 12:19 #12
Nu har jeg gemt siden via Filer -> Gem som...og linien med input ser således ud:

<INPUT style="HEIGHT: 10px" onclick="this.form.amount.value=(this.checked)?+this.form.amount.value+ +this.value:+this.form.amount.value-(+this.value);"
type=checkbox value=650000 name=28>

så der er en grund til at den fejler...kan den laves på anden måde?
Avatar billede leasing Nybegynder
19. juli 2005 - 13:07 #13
roenving> Når jeg lægger koden ind i asp og på den måde jeg gør det i den rigtige kode får jeg også fejl:

<html>
<head>

<script type="text/javascript">
function ins1000Sep(val){
  val = val.split(",");
  val[0] = val[0].split("").reverse().join("");
  val[0] = val[0].replace(/(\d{3})/g,"$1.");
  val[0] = val[0].split("").reverse().join("").replace(/^\./,"");
  return val.join(",");
}

function rem1000Sep(val){
  return val.replace(/\./g,"");
}
</script>
</head
<body>

<form method=post name=frmSpillere>
<input type="text" name="amount" value="0"><br>
<%
strHTML = strHTML & "200.000 <input type=checkbox value=200000 onclick='this.form.amount.value=this.checked?ins1000Sep(''+(+rem1000Sep(this.form.amount.value)+ +this.value)):ins1000Sep(''+(+rem1000Sep(this.form.amount.value)-this.value));' <br>"
strHTML = strHTML & "200.000 <input type=checkbox value=200000 onclick='this.form.amount.value=this.checked?ins1000Sep(''+(+rem1000Sep(this.form.amount.value)+ +this.value)):ins1000Sep(''+(+rem1000Sep(this.form.amount.value)-this.value));' <br>"
strHTML = strHTML & "200.000 <input type=checkbox value=200000 onclick='this.form.amount.value=this.checked?ins1000Sep(''+(+rem1000Sep(this.form.amount.value)+ +this.value)):ins1000Sep(''+(+rem1000Sep(this.form.amount.value)-this.value));' <br>"
strHTML = strHTML & "200.000 <input type=checkbox value=200000 onclick='this.form.amount.value=this.checked?ins1000Sep(''+(+rem1000Sep(this.form.amount.value)+ +this.value)):ins1000Sep(''+(+rem1000Sep(this.form.amount.value)-this.value));' <br>"
strHTML = strHTML & "200.000 <input type=checkbox value=200000 onclick='this.form.amount.value=this.checked?ins1000Sep(''+(+rem1000Sep(this.form.amount.value)+ +this.value)):ins1000Sep(''+(+rem1000Sep(this.form.amount.value)-this.value));' <br>"
strHTML = strHTML & "200.000 <input type=checkbox value=200000 onclick='this.form.amount.value=this.checked?ins1000Sep(''+(+rem1000Sep(this.form.amount.value)+ +this.value)):ins1000Sep(''+(+rem1000Sep(this.form.amount.value)-this.value));' <br>"
strHTML = strHTML & "200.000 <input type=checkbox value=200000 onclick='this.form.amount.value=this.checked?ins1000Sep(''+(+rem1000Sep(this.form.amount.value)+ +this.value)):ins1000Sep(''+(+rem1000Sep(this.form.amount.value)-this.value));' <br>"
strHTML = strHTML & "200.000 <input type=checkbox value=200000 onclick='this.form.amount.value=this.checked?ins1000Sep(''+(+rem1000Sep(this.form.amount.value)+ +this.value)):ins1000Sep(''+(+rem1000Sep(this.form.amount.value)-this.value));' <br>"
strHTML = strHTML & "200.000 <input type=checkbox value=200000 onclick='this.form.amount.value=this.checked?ins1000Sep(''+(+rem1000Sep(this.form.amount.value)+ +this.value)):ins1000Sep(''+(+rem1000Sep(this.form.amount.value)-this.value));' <br>"
strHTML = strHTML & "200.000 <input type=checkbox value=200000 onclick='this.form.amount.value=this.checked?ins1000Sep(''+(+rem1000Sep(this.form.amount.value)+ +this.value)):ins1000Sep(''+(+rem1000Sep(this.form.amount.value)-this.value));' <br>"
strHTML = strHTML & "200.000 <input type=checkbox value=200000 onclick='this.form.amount.value=this.checked?ins1000Sep(''+(+rem1000Sep(this.form.amount.value)+ +this.value)):ins1000Sep(''+(+rem1000Sep(this.form.amount.value)-this.value));' <br>"
strHTML = strHTML & "200.000 <input type=checkbox value=200000 onclick='this.form.amount.value=this.checked?ins1000Sep(''+(+rem1000Sep(this.form.amount.value)+ +this.value)):ins1000Sep(''+(+rem1000Sep(this.form.amount.value)-this.value));' <br>"
strHTML = strHTML & "200.000 <input type=checkbox value=200000 onclick='this.form.amount.value=this.checked?ins1000Sep(''+(+rem1000Sep(this.form.amount.value)+ +this.value)):ins1000Sep(''+(+rem1000Sep(this.form.amount.value)-this.value));' <br>"
strHTML = strHTML & "200.000 <input type=checkbox value=200000 onclick='this.form.amount.value=this.checked?ins1000Sep(''+(+rem1000Sep(this.form.amount.value)+ +this.value)):ins1000Sep(''+(+rem1000Sep(this.form.amount.value)-this.value));' <br>"

response.write strHTML
%>
<br><br>
</form>

</body>
Avatar billede roenving Novice
19. juli 2005 - 13:28 #14
Fordi der kommer rod i 'er og ""er:

strHTML = strHTML & "200.000 <input type=checkbox value=200000 onclick='this.form.amount.value=this.checked?ins1000Sep(""""+(+rem1000Sep(this.form.amount.value)+ +this.value)):ins1000Sep(""""+(+rem1000Sep(this.form.amount.value)-this.value));' <br>"
Avatar billede leasing Nybegynder
19. juli 2005 - 14:11 #15
Så virker den...kanon takker mange gange.

Jeg har dog lige et spørgsmål mere.
Den værdi der bliver opsummeret i inputfeltet kan den værdi holdes op imod en værdi fra min database således, at hvis værdien fra input overstiger værdi fra databasen så skal knap disables.
Avatar billede roenving Novice
19. juli 2005 - 14:19 #16
-- så er vi nået ud i, at det vil være tåbeligt ikke at oprette en funktion til det:

function addSubtractValue(elm){
  var amnt = elm.form.amount;
  var total = +rem1000Sep(amnt.value);
  var maxTotal = +elm.form.maxAmount.value;
  var newNum = +elm.value;
  var newTotal = total + elm.checked?newNum:-newNum;
  amnt.value = ins1000Sep(""+newTotal);
  elm.form.minSubmit.disabled = newTotal > maxTotal;
}

-- og så bliver felterne:

strHTML = strHTML & "200.000 <input type=checkbox value=200000 onclick='addSubtract(this);' <br>"
Avatar billede leasing Nybegynder
19. juli 2005 - 14:27 #17
Det er denne knap:

<INPUT class=submitknap type=submit value="Godkend - videre til trin 4"></center>&nbsp;&nbsp;

som skal disables når sammentællingen overstiger værdien fra database.
Avatar billede roenving Novice
19. juli 2005 - 14:57 #18
-- så skal du give den et navn, så vi kan finde den:

<INPUT class="submitknap" type="submit" value="Godkend - videre til trin 4" name="minSubmit">
Avatar billede leasing Nybegynder
19. juli 2005 - 15:05 #19
skal jeg bruge den samme function??? Det virker nemlig ikke.
Avatar billede leasing Nybegynder
19. juli 2005 - 15:20 #20
Kan man få denne onclick:

onclick=visValg(this,'" & rs1("raekketest") & "','" & rs("sex") & "');

med i den onclick jeg har nu:
onclick='this.form.amount.value=this.checked?ins1000Sep(""""+(+rem1000Sep(this.form.amount.value)+ +this.value)):ins1000Sep(""""+(+rem1000Sep(this.form.amount.value)-this.value));'

den skal nemlig overføre mine data...så det er yderst vigtigt at jeg kan få den med. Evt. kan man lave den ene onclick om til onchange?
Avatar billede roenving Novice
19. juli 2005 - 15:23 #21
Du kan bare bruge almindelig javascript-syntaks i onclick-eventen, dvs. du tilføjer:

onclick='this.form.amount.value=(this.checked?ins1000Sep(""""+(+rem1000Sep(this.form.amount.value)+ +this.value)):ins1000Sep(""""+(+rem1000Sep(this.form.amount.value)-this.value)));visValg(this,""" & rs1("raekketest") & """,""" & rs("sex") & """);'
Avatar billede leasing Nybegynder
19. juli 2005 - 15:28 #22
den melder desværre fejl (gul besked i nederste venstre hjørne)
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