webForumDet fria alternativet

Formatera i tusendelar

11 svar · 3 366 visningar · startad av ironhead

ironheadMedlem sedan mars 20011 327 inlägg
#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>
voigtann1Medlem sedan juni 20018 810 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

ironheadMedlem sedan mars 20011 327 inlägg
#3

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

ironheadMedlem sedan mars 20011 327 inlägg
#4

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

voigtann1Medlem sedan juni 20018 810 inlägg
#5

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

ironheadMedlem sedan mars 20011 327 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.

voigtann1Medlem sedan juni 20018 810 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"

silfverMedlem sedan apr. 20039 709 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

voigtann1Medlem sedan juni 20018 810 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).

silfverMedlem sedan apr. 20039 709 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.

voigtann1Medlem sedan juni 20018 810 inlägg
#11

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

silfverMedlem sedan apr. 20039 709 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. ;)

Genererad på 372 ms · cache AV · v20260730165559-full.f96bc7eb