2
<script type="text/javascript">
var statustext="test";
$zack(function() {
  $zack.setOnStatus(changelable);
});
function changelable(status) {
  if (status=='A')
    statustext="OK";
  else if (status=='B')
    statustext="Ready";
  else if (status=='C')
    statustext="Go";
  document.getElementById('title').innerHTML = statustext; // OK, Ready or Go
}
</script>

document.getElementById('title').innerHTMLOK、Ready、または Goを示します。

しかし、上記のスクリプトの下のどこかでこのスクリプトを使用すると、statustext変数には事前に割り当てられたテストテキストが含まれます。

<script type="text/javascript">
document.getElementById('title2').innerHTML = statustext; // test
</script>

OK、Ready、または Goテキストで複数回使用statustextしたい。これを行う方法?

4

1 に答える 1

4

コードはページが読み込まれるとすぐtitle2に実行されますが、他のコードはイベント (ステータス変更イベントまたはそれが呼び出すもの) に応答して実行されます。changelable

title2設定しているのと同じものに設定したい場合は、次のtitle行を移動します。

document.getElementById('title2').innerHTML = statustext;

...この行の直後の関数に:changelable

document.getElementById('title').innerHTML = statustext;

例えば:

document.getElementById('title').innerHTML = statustext;
document.getElementById('title2').innerHTML = statustext;

またはあなたが好きなら:

document.getElementById('title').innerHTML = document.getElementById('title2').innerHTML = statustext;

それとは別に、あなたのif/else if/else ifシーケンスは実際にはswitchステートメントの目的です:

function changelable(status) {
  switch (status) {
    case 'A':
      statustext="OK";
      break;
    case 'B':
      statustext="Ready";
      break;
    case 'C':
      statustext="Go";
      break;
  }
  document.getElementById('title').innerHTML = statustext;
  document.getElementById('title2').innerHTML = statustext;
}

または、ルックアップ テーブルを使用できます。

var statustext="test";
var statusLabels = {
    A: "OK",
    B: "Ready",
    C: "GO"
};
$zack(function() {
  $zack.setOnStatus(changelable);
});
function changelable(status) {
  statustext = statusLabels[status] || statustext;
  document.getElementById('title').innerHTML = statustext;
  document.getElementById('title2').innerHTML = statustext;
}
于 2013-02-21T09:48:45.253 に答える