1

次のコードを持つ:

<script type="text/javascript">
var chargeup = 0;
var flag1 = "no";
var stored = <?php print $x_row['watts']; ?>; // Gets wstored (previous value) from DB.
var charge = <?php print $charge; ?> + stored;
window.onload = function chargeT1() {
timer = setInterval(function chargeT2 () {
    charge = charge+<?php print $n_gr; ?>; // $n_gr = 1; 
        if (flag1 !="no"){
            charge = chargeup;
        }
    document.getElementById('charge').innerHTML = charge;
    flag1 = "no";
}, 1000);
}
</script>

$n_gr = 1 であるため、毎秒 +1 を追加する「タイマー」を取得します。

私が達成しようとしていること: 「flag1 = 'yes';」を返したい 変数「charge」を「chargeup」に変更し、毎秒+1を追加し続けるコールバック関数からの新しい「chargeup」値。

例: 瞬間 "t" では、charge の値は "100"、"t+1" では 101、"t+2" では 102、... イベントがコールバック関数をトリガーし、"chargeup = 10" を返します。 " および "flag1=yes" の場合、"charge" は 10 に変化し、10 から毎秒 +1 を追加し続けます: t+3 は 11、t+4 は 12...

何が間違っているのかわかりませんが、コールバック関数がたとえば 10 を返すと、料金は 10 になり、次に 101,1011,10111... になります。

これは私のコールバック関数です:

function useHttpResponse (){
   if (http.readyState == 4) {
      if (http.status == 200) { 
      var timeWatts = http.responseXML.getElementsByTagName("upwatts")[0];
      chargeup = timeWatts.childNodes[0].nodeValue; //example: returns a value of 10
      flag1 = "yes";
      } else {
         document.getElementById('showbuy').innerHTML='<img src="anim.gif">';
             }
      }
  }

私は本当に立ち往生しています。アイデアや提案は大歓迎です。よろしくお願いいたします。

4

2 に答える 2

1

chargeUpは文字列のように見えますが、文字列でもchargeあり、(string)charge + (int)$n_gr=> string. これは、JavaScript の弱い型付けがオーバーロードされたときに起こること+です。

これは、どこかで数値強制を使用することで修復できます。次の行のいずれかを次のように変更します。

charge = +charge + +<?php print $n_gr; ?>;

また

charge = +chargeup; // my recommendation

(単項+は、キャストから番号への承認された JS イディオムです。)

于 2013-06-03T02:01:41.813 に答える