Javascript Formattazione Dei Numeri Con La Virgola

Sto cercando di formattare i numeri in modo che essi hanno una virgola tra ogni 3 numeri. È molto glitch, tuttavia, e non una volta che si arriva a 8 numeri. Ho messo tutto il codice in un jsfiddle di seguito:

function commaSeparateNumber(val){
    val = val.replace(',', '');
    var array = val.split('');
    var index = -3;
    while (array.length + index > 0) {
        array.splice(index, 0, ',');
        //Decrement by 4 since we just added another unit to the array.
        index -= 4;
    }
    return array.join('');
};    

$(document).on('keyup', '.test', function() {
    var value = $(this).val();
    value = commaSeparateNumber(value);
    $(this).val(value);
});

http://jsfiddle.net/R8JrF/

Qualsiasi aiuto è gradito!

  • Check it out: stackoverflow.com/questions/2901102/…
  • Woah! Hai premere Home, Del chiavi e verificare come ci si diventa?
  • Grazie, sì ho già visto che uno e ho provato il codice ma ho ancora ottenere un simile problema.
  • Non si dovrebbe cercare di formato di input, mentre è inserito. Si porta a torto risultati intermedi, e di molto eccentrico UX.
  • Problema da prendere un po ‘ per modo difficile. Check out la mia risposta, la pubblicazione di una spiegazione.
  • Va bene devo solo aggiornarlo con un on (“modifica”), invece?
  • Il motivo per cui non era stato, una volta che si apportano modifiche, è necessario rimuovere tutte le virgole, e fare la formattazione di nuovo, che non è stato fatto in OP il codice così come l’altro codice di risposta.
  • onChange() sarebbe davvero la migliore opzione, UX saggio.
  • Ok ragazzi, onChange() e onKeyUp() fa la stessa cosa qui. 🙂
  • No non è così. onChange si innesca solo quando il campo perde la messa a fuoco.
  • È la soluzione?
  • Sì che soluzione ha funzionato bene. Grazie!

InformationsquelleAutor MrGrinst | 2013-06-03

 

3 Replies
  1. 25

    Ho improvvisato la risposta nel commento. Che cosa si avrebbe bisogno è il seguente codice. Controllare questo fuori e anche il violino:

    $(document).on('keyup', '.test', function() {
        var x = $(this).val();
        $(this).val(x.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ","));
    });

    Violino: http://jsfiddle.net/praveenscience/R8JrF/1/

    Il motivo per cui non era stato, una volta che si apportano modifiche, è necessario rimuovere tutte le virgole, e fare la formattazione di nuovo, che non è stato fatto in OP il codice così come l’altro codice di risposta.

    • Erk! Ora non posso usare la mia tasti freccia per spostare il cursore a sinistra!
    • Cosa???? Attendere. Lemme, di controllo e di ritorno migliore. 😛
    • Controllare il codice originale. È il modo peggiore. Continua a aggiungere una virgola. 🙂 Il mio è meglio. Cercherà di risolvere il problema. 🙂
    • Oh il vostro primo tentativo, funziona meglio di quella originale, ma direi che sono d’accordo con @Bergi che questo tipo di formattazione non è utile all’interno di input. Non troverete un keyup soluzione che mi permette di modificare o aggiungere una cifra a metà della stringa (e tiene ancora il mio cursore nello stesso luogo), senza un sacco di ulteriori Javascript, o come io la chiamerei “overkill”
    • Lemme dire è semplice. Questo problema può essere affrontato utilizzando onBlur() così, questa modifica viene attivato solo quando il campo perde la messa a fuoco. Risolve?
    • Sì, se sei felice che la modifica che “onblur” campo può lasciare temporaneamente cercando come 1,234,55567,890. Non so il motivo per il po che vogliono virgole nel suo ingresso, ma personalmente non riesco a vedere i benefici, il che rende difficile sapere quanta fatica è “troppo” per farlo funzionare
    • Sì. Ho capito. Ma quando sarà 1,234,55567,890 – QUESTO? 55567??? Dire che è un errore di battitura!
    • cerchiamo di continuare questa discussione in chat
    • quando ading punto per mobile ad esempio: 1,000,000.00 dopo questo numero se si aggiungono altre cifre, il poing andrà a sostituire la virgola e il numero sarà di circa 1.000.000.000.000
    • Qual è il motivo per il downvote?

  2. 5

    Il tuo problema è che quando si arriva a 8 cifre, il risultato intermedio ha già due virgole in esso. Eppure,

    val = val.replace(',', '');

    non solo di sostituire il primo. Si avrebbe bisogno di fornire una espressione regolare con il globale flag impostato:

    val = val.replace(/,/g, '');

    Aggiornato, di lavoro, di violino

Lascia un commento