webForumDet fria alternativet

Formatera i tusendelar

JavaScript

11 svar · 3 368 visningar · startad av ironhead

Medlem sedan mars 20011 346 inlägg
Frågan#1

Hej alla glada! Hoppas på lite hjälp...
Jag försöker formatera siffror med tusendelsformatering (heter det så?)

t.ex.: 
1000 -> 1 000
10000 -> 10 000
10000 -> 100 000
etc.

men när jag kommer över 1000000 (en miljon) i nedanstående skript blir det noll (0)...hur ska man skriva för att kunna skriva
åtminstonde upp till 10 eller 100 miljoner. Snälla hjälp mig :r

<html>
<head>
<script>
function number_format (number,id) {

    var box = document.getElementById(id);
    number = box.value.replace(' ','');	

    var n = number;
    n = !isFinite(+n) ? 0 : +n;

    var s = n.toString();
    var _, i;

    if (s >= 1000) {
        _ = s.split(/\D/);
        i = _[0].length % 3 || 3;
        
        _[0] = s.slice(0,i + (n < 0)) + _[0].slice(i).replace(/(\d{3})/g, ' '+'$1');
        s = _;
    	}
      box.value = s;
}
</script>
</head>
 <body>
  <form name="form1" id="form1">
  
   <input type="text" id="t1" onkeyup="javascript:number_format(this.value,this.id);">

  </form>
 </body>

</html>
Medlem sedan juni 20019 519 inlägg
#2
<html>
<head>
<script>
function number_format (elm) {
	var number = elm.value.replace(/\D+/ig, "");
	var n = number;
	var s = n.toString();
	var _, i;
	if (s.length >= 4) {
		_ = s.split(/\D/);
		i = _[0].length % 3 || 3;
		_[0] = s.slice(0,i + (n < 0)) + _[0].slice(i).replace(/(\d{3})/g, ' $1');
		s = _;
	}
	elm.value = s;
}
</script>
</head>
 <body>
  <form name="form1" id="form1">
  
   <input type="text" id="t1" onkeyup="javascript:number_format(this);">

  </form>
 </body>

</html>

Känns lite omständigt att du inte refera till this endast och använda den sosm referens, då behöver du inte hämta elementet en gång till, då du redan har en klockren referens med this

Medlem sedan mars 20011 346 inlägg
#3

Miljoners (eller ska jag säga tusendelars) tack! :bire

Medlem sedan mars 20011 346 inlägg
#4

Kan man göra så att man tillåter mellanslag i textboxen också

Medlem sedan juni 20019 519 inlägg
#5

Frågan är varför du skulle vilja tillåta mellanslag, den gör ju formateringen till dig.

Medlem sedan mars 20011 346 inlägg
#6

voigtann1 skrev:

Frågan är varför du skulle vilja tillåta mellanslag, den gör ju formateringen till dig.

Vissa användare är van att skriva in siffran i det formatet direkt, och vissa är inte van...och då ska siffran formateras.

Medlem sedan juni 20019 519 inlägg
#7

Det spelar ju ingen roll då ju, mellanslag kommer formateras om det är ett korrekt värde:
"1 000" => "1000" => "1 000"

Medlem sedan apr. 200312 679 inlägg
#8

Hur skulle den här koden se ut om man inte vill tillåta space? Alltså att man endast kan mata in siffror 0-9. :)

r\ Jag läste nog lite för snabbt. Din funktion fungerar lysande som vanligt voigtann1! (y) :bire

Medlem sedan juni 20019 519 inlägg
#9

Kolla vad det är för key-event som triggas om det inte är 0-9 på tangentbordet retunera false (kanske skall tillåta fler tangenter än bara alla nummer).

Medlem sedan apr. 200312 679 inlägg
#10

voigtann1 skrev:

Kolla vad det är för key-event som triggas om det inte är 0-9 på tangentbordet retunera false (kanske skall tillåta fler tangenter än bara alla nummer).

onkeyup, eller vad menar du? Skriver jag i bokstäver så raderas de.

De enda buggarna jag hittar är att tabbningen mellan inputfälten inte är helt optimal om fältet redan har ett värde ifyllt. Då tar den bort markeringen fort som attan. :) Man kan inte ctrl+a:a heller.

Likadant om fältet har ett defaultvärde så appliceras ju inte scriptet på dem som default.

Medlem sedan juni 20019 519 inlägg
#11

Ja de försvinner men den ersätter hela formulär texten. Men det fungera

Medlem sedan apr. 200312 679 inlägg
#12

voigtann1 skrev:

Ja de försvinner men den ersätter hela formulär texten. Men det fungera

Fungerar utmärkt! Tack för hjälpen. ;)

262 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)