Originariamente inviato da Micky^
ti do una info, ho trovato un bug piccolo, se metti solo la "," e esci ti da "NaN,undefined"
potresti aggiungere che se il carattere digitato è "," ed è il primo carattere non lo deve scrivere... questa funzione è uscita proprio fica quindi bisogna perfezionarla

e poi conservarla ovviamente
Originariamente inviato da Micky^
altra cosetta,
se entri nel campo e poi esci senza scrivere nulla appare lo stesso errore : NaN,undefined
uso google chrome se ti serve sapere il browser utilizzato
ciao
Michele
Ok, grazie delle segnalazioni! In rosso le aggiunte:
Versione senza i puntini per le migliaia:
codice:
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Esempio</title>
<script type="text/javascript">
function numbersOnly(oMyField1, oKeyEvent) {
var nChar = (oKeyEvent || window.event || { charCode: 0 }).charCode, sChar = String.fromCharCode(nChar), rSeparator = /,/;
return nChar === 0 || /\d/.test(sChar) || (rSeparator.test(sChar) && !rSeparator.test(oMyField1.value));
}
function formatNumber(oMyField2) {
oMyField2.value = parseFloat("0" + oMyField2.value.replace(",",".")).toFixed(2).replace(".",",");
}
function unformatNumber(oMyField3) {
oMyField3.value = oMyField3.value.replace(/(?:^0)?,00|(,\d)0/g, "$1");
}
</script>
</head>
<body>
<form name="myForm">
Inserire importo: <input type="text" name="importo" value="5000,00" onblur="formatNumber(this);" onfocus="unformatNumber(this);" onkeypress="return numbersOnly(this, event);" onpaste="return false;" /></p>
</form>
</body>
</html>
Versione con i puntini per le migliaia:
codice:
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Esempio</title>
<script type="text/javascript">
function numbersOnly(oMyField1, oKeyEvent) {
var nChar = (oKeyEvent || window.event || { charCode: 0 }).charCode, sChar = String.fromCharCode(nChar), rSeparator = /,/;
return nChar === 0 || /\d/.test(sChar) || (rSeparator.test(sChar) && !rSeparator.test(oMyField1.value));
}
function formatNumber(oMyField2) {
var aFragms = parseFloat("0" + oMyField2.value.replace(/\./g, "").replace(",",".")).toFixed(2).split(".");
oMyField2.value = aFragms[0].replace(/(\d{3})+$/g, ".$&").replace(/^\./, "").replace(/\d{3}(?!$)/g, "$&.") + "," + aFragms[1];
}
function unformatNumber(oMyField3) {
oMyField3.value = oMyField3.value.replace(/\.|(?:^0)?,00|(,\d)0/g, "$1");
}
</script>
</head>
<body>
<form name="myForm">
Inserire importo: <input type="text" name="importo" value="5.000,00" onblur="formatNumber(this);" onfocus="unformatNumber(this);" onkeypress="return numbersOnly(this, event);" onpaste="return false;" /></p>
</form>
</body>
</html>
New entry! Se preferisci il puntino alto invece del puntino basso (in verde le sostituzioni)…
codice:
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Esempio</title>
<script type="text/javascript">
function numbersOnly(oMyField1, oKeyEvent) {
var nChar = (oKeyEvent || window.event || { charCode: 0 }).charCode, sChar = String.fromCharCode(nChar), rSeparator = /,/;
return nChar === 0 || /\d/.test(sChar) || (rSeparator.test(sChar) && !rSeparator.test(oMyField1.value));
}
function formatNumber(oMyField2) {
var aFragms = parseFloat("0" + oMyField2.value.replace(/\u02D9/g, "").replace(",",".")).toFixed(2).split(".");
oMyField2.value = aFragms[0].replace(/(\d{3})+$/g, "\u02D9$&").replace(/^\u02D9/, "").replace(/\d{3}(?!$)/g, "$&\u02D9") + "," + aFragms[1];
}
function unformatNumber(oMyField3) {
oMyField3.value = oMyField3.value.replace(/\u02D9|(?:^0)?,00|(,\d)0/g, "$1");
}
</script>
</head>
<body>
<form name="myForm">
Inserire importo: <input type="text" name="importo" value="5&#729;000,00" onblur="formatNumber(this);" onfocus="unformatNumber(this);" onkeypress="return numbersOnly(this, event);" onpaste="return false;" /></p>
</form>
</body>
</html>