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').innerHTML显示OK、Ready 或 Go

但是,当我在上述脚本下方的某处使用此脚本时,该statustext变量包含预先分配的测试文本:

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

我想多次statustext使用OK、Ready 或 Go文本。这该怎么做?

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 回答