2017-09-19 8 views
0

私は増分/アイドルゲームを作ることを試みています。カンマを使って大量の数字を区切りたいと思っています。例えば、1,000は1,000になります。値は変更されるまですべて変化します。常に変化する数字をコンマでフォーマットする

$<span id="money">0</span> 

上記は、spanタグを使用してjavascriptからmoney変数を呼び出す方法を示しています。どのように私はこのお金の変数が常に変化してもフォーマットされたままであることを確認するでしょうか?

編集

function formatNumber(e){ 
var rex = /(^\d{2})|(\d{1,3})(?=\d{1,3}|$)/g, 
    val = this.value.replace(/^0+|\.|,/g,""), 
    res; 

if (val.length) { 
res = Array.prototype.reduce.call(val, (p,c) => c + p)   // reverse the pure numbers string 
      .match(rex)           // get groups in array 
      .reduce((p,c,i) => i - 1 ? p + "," + c : p + "." + c); // insert (.) and (,) accordingly 
res += /\.|,/.test(res) ? "" : ".0";        // test if res has (.) or (,) in it 
this.value = Array.prototype.reduce.call(res, (p,c) => c + p); // reverse the string and display 
    } 
} 

var mySpan = document.getElementById("money"); 
mySpan.addEventListener("change", formatNumber); 

私は今、私のjavascriptのにこのコードを実装しているが、それはまだ変数を更新していないようです。

編集2

function moneyClick(number){ 
money = money + number; 
document.getElementById("money").innerHTML = money; 
lifetimeearnings = lifetimeearnings + number; 
document.getElementById("lifetimeearnings").innerHTML = lifetimeearnings; 

}。

+0

チェック[この](https://stackoverflow.com/a/46281147/4543207)それが助けかどうかを確認します。 – Redu

+0

これは私が必要とするものと似ていますが、複数の入力を持つ変数に書式を常に保持する方法を示していません。あなたはこれを行う方法を知っていますか? – FatboyJames

+1

その 'formatNumber'コールバックをspan要素の' 'change" 'イベントリスナーに挿入しようとするかもしれません。 – Redu

答えて

0

ゲームのJavaScriptのmoney変数の変更を計算するたびに@redu pointed outの何らかのバリエーションを使用して更新するか、またはでsetInterval()を使用して100ミリ秒ごとに更新します。

0

OK ..私のコメントは多少間違っていました。 "change"イベントリスナーは、textContentのような子ノードでの変更を知らないことを理解しています。実際にはこの"DOMSubtreeModified"イベントリスナーが利用できます。そう;

function formatNumber(e) { 
 
    var rex = /(^\d{2})|(\d{1,3})(?=\d{1,3}|$)/g, 
 
     val = this.textContent.replace(/^0+|\.|,/g, ""), 
 
     res; 
 

 
    if (val.length) { 
 
    res = Array.prototype.reduce.call(val, (p, c) => c + p)      // reverse the pure numbers string 
 
         .match(rex)            // get groups in array 
 
         .reduce((p, c, i) => i - 1 ? p + "," + c : p + "." + c); // insert (.) and (,) accordingly 
 
    res += /\.|,/.test(res) ? "" : ".0";           // test if res has (.) or (,) in it 
 
    this.textContent = Array.prototype.reduce.call(res, (p, c) => c + p);   // reverse the string and display 
 
    } 
 
} 
 

 
var mySpan = document.getElementById("money"); 
 
mySpan.addEventListener("DOMSubtreeModified", formatNumber); 
 

 
for (var i = 0; i < 10; i++) { 
 
    setTimeout(_ => mySpan.textContent = Math.floor(Math.random() * 10000000), 1000 * i); 
 
}
<span id="money">0</span>

+0

私もこれを実装しようとしましたが、残念ながらそれもうまくいきませんでした。 – FatboyJames

+0

これを有効にするには、スパン要素の 'textContent'を純粋な数値文字列で更新する必要があります。どのように正確にスパン要素を更新しますか..? – Redu

+0

これは、私が入れたもののような関数を使って更新されています。 – FatboyJames

関連する問題