J'ai un champ de saisie de texte pour un formulaire où les utilisateurs sont censés entrer un numéro. Je voudrais insérer automatiquement une virgule après chaque troisième chiffre. P>
Par exemple, entrer dans "20" entraînerait "20". Entrer dans '100' entraînerait «100». Mais s'ils devaient entrer «1000», une virgule serait insérée entre les 0 et les 0 suivants (par exemple, 1 000). Évidemment, ce comportement continuerait si le nombre atteint 7 chiffres (par exemple, 1 000 000). P>
Y a-t-il un moyen facile de faire cela? Je suis un peu de nouveaub dans tout cela, alors s'il vous plaît répondez comme si vous parlez à un enfant :) p>
10 Réponses :
function addCommas(nStr){ nStr += ''; x = nStr.split('.'); x1 = x[0]; x2 = x.length > 1 ? '.' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + ',' + '$2'); } return x1 + x2; } Pass the value of the input into function and set the input with the result returned. You can bind this to an onchange event.Here is a working example that relies on jquery to bind the change event and set the value: http://jsfiddle.net/TYyfn/Comma script is from: http://www.mredkj.com/javascript/nfbasic.html
Cela ressemble à ce que je veux, mais je ne suis pas de haut sur mon javascript! Est-ce que je viens de créer un nouveau fichier JS avec ça? Comment puis-je le lier à un événement ONCHANGE? Désolé d'être une blonde stupide
Oui, ce n'est pas terriblement difficile. Je crois Cette référence peut vous donner ce dont vous avez besoin. P>
Notez que pour que cela soit dynamique (comme ils tapez), vous auriez besoin d'avoir ceci câblé au gestionnaire de changement de champ de saisie. Sinon, vous pouvez filer ceci au gestionnaire de flou de champ de saisie (qui aura pour effet de mettre les virgules sur le terrain lorsqu'ils quittent le champ). P>
Hé là-bas, j'aime l'idée de travailler comme ils tapent. L'exemple de KMB385 est sympa mais doit être flou (quoi que ce soit), car cela ne fonctionne que lorsque vous avez cliqué sur le champ. Pouvez-vous me donner un peu plus de détails sur la façon dont je vais faire ce travail. Je n'ai vraiment aucune idée de JavaScript que d'incluant les scripts que quelqu'un m'a donné dans un didacticiel qui est très visé au débutant total. Merci :)
function addCommas(nStr){ var offset = nStr.length % 3; if (offset == 0) return nStr.substring(0, offset) + nStr.substring(offset).replace(/([0-9]{3})(?=[0-9]+)/g, "$1,"); else return nStr.substring(0, offset) + nStr.substring(offset).replace(/([0-9]{3})/g, ",$1"); } alert(addCommas("1234567"));
Cette réponse a l'air sympa et petite (et donc moins intimidante pour moi). Mais je n'ai pas d'idée de quoi faire avec ça :(
Cela ne fonctionne pas ... Je reçois '123 456,7' quand il devrait être "1 234 567"
Essayez cela: cela peut avoir besoin d'un peu de sweeking.
Prenez la fonction d'en haut: Fonction addCommas (NStr) {...} et mettez dans un fichier JS. P> li>
Ajouter un lien de script dans la page En-tête de la bibliothèque de JQuery avec: src = "http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js" p> li>
Assurez-vous que votre boîte de texte a une carte d'identité unique. ex: id = "virgule_input". p> li>
dans le même fichier JS Ajouter P>
Le JavaScript suivant: et le suivant HTML: p> devrait résoudre votre problème. La clé est d'utiliser 'OnKeyUp'. P> Essayez ici ici http://jsfiddle.net/yusph/ p> p>
Ne fonctionne pas lorsque vous devez modifier au milieu du curseur, saute à la fin après avoir remplacé la valeur d'entrée.
Pour le plaisir de celui-ci:
'9876543210' .split('') // flip the entire string so that we can break every .reverse() // 3rd digit, starting from the end .join('') .split(/(...)/) // split on every 3rd .reverse() // flip the string again, though now each group of 3 is .join(',') // backwards .replace(/,(?=,)|,$|^,/g, '') // remove extra , .replace(/(,|^)(\d)(\d)?(\d)?/g, '$1$4$3$2') // flip each group of digits // 9,876,543,210
Plus simple: "1234567" .Split (''). Reverse (). Rejoindre (''). Remplacer (/ (. {3}) / g, 'Remplacer (/, $ /, '') .Split (''). Inverser () .join ('') Code>
Vous pouvez utiliser des fonctions JavaScript Standart. Exemple ici;
http://jsfiddle.net/azur/jd5pa/
S'il vous plaît mentionner que votre solution nécessite jQuery
Merci pour votre rappel, j'ai supprimé la nécessité de la bibliothèque. La solution est maintenant pure JS.
Une autre façon de le faire, pas de regex, juste une manipulation de tableau: Assurez-vous de passer une chaîne à la fonction p>
Solution de chaîne simple dans pure JS fort>: démo: http://jsfiddle.net/kevinvanlierde/tyyfn/141/ p> p>
var formatNumber = function(num, type) { var numSplit, int, dec, type; num = Math.abs(num); num = num.toFixed(2); numSplit = num.split('.') int = numSplit[0]; if (int.length >= 3) { int = int.substr(0, int.length - 3) + ',' + int.substr(int.length - 3, 3); } dec = numSplit[1]; return (type === 'exp'? sign = '-' : '+') + ' ' + int + '.' + dec; };
Le moyen le plus rapide est
numéro.tolocalestring ("fr"); code>