下面是一个示例页面,,我要求的功能是,当用户点击checkbox后,该checkbox所在行的背景颜色改变,取消选择后,背景变回白色。这一部分功能下面的代码已经实现,如下所示:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head><body>
<form id="form1" name="form1" method="post" action="test.htm">
  <table width="500" border="0" cellspacing="0" cellpadding="0">
    <tr id="tr1" class=saveHistory>
      <td ><input type="checkbox" name="checkbox" value="checkbox" onclick="changebg()" /></td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><input name="checkbox" type="checkbox" value="checkbox" onclick="changebg()"/></td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><input type="checkbox" name="checkbox" value="checkbox" onclick="changebg()"/></td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><input type="checkbox" name="checkbox" value="checkbox" /></td>
      <td><input type="submit" name="Submit" value="提交" /></td>
    </tr>
  </table>
</form>
</body>
</html><script>
function changebg(){
if(event.srcElement.tagName=="INPUT" && event.srcElement.checked==true){
event.srcElement.parentElement.parentElement.style.background="#336699"; }else{
event.srcElement.parentElement.parentElement.style.background="#ffffff";
}
}
</script>现在的问题是:当我选中一个checkbox,提交到另外一个页面时,再返回这个页面,checkbox的选中状态是正确的,但是tr的背景颜色不再是提交前的值..为了解决这个问题,我加了如下代码:
代码段2:
<script>
for(var i=0;i<form1.length;i++){
if((form1.elements[i].name=="checkbox") && form1.elements[i].checked==true){
form1.elements[i].style.background="#336699";
}
}
</script>上面这一小段代码(代码段2),不管是第一次打开页面、刷新还是从其他页面后退过来,都应该会执行
不知道是什么原因,明明返回后有些checkbox的状态是被选中的,但是在javascript中获取的checked值总是false,也就不会执行改变颜色的语句。我用google查找了一下相关资料,有人说,当用后退返回前一页时,IE是先执行页面上的代码,这个时候页面上控件的值都是默认的,当页面代码执行完毕后,再从缓存中取出值付给相应的控件,所以我最后这一段代码 的if判断 中form1.elements[i].checked==true 总是false,是这样吗?

解决方案 »

  1.   

    不好意思,最后一段代码改一下:
    代码段2: 
    for(var i=0;i<form1.length;i++){
    if((form1.elements[i].name=="checkbox") && form1.elements[i].checked==true){
    form1.elements[i].parentElement.parentElement.style.background="#336699";
    }else{
    form1.elements[i].parentElement.parentElement.style.background="#FFFFFF";
    }
    }
      

  2.   

    onload事件之后再重新设置一遍。
      

  3.   

    给响应行指定IDonclick=TR1.backgroundColor = '#E7FFDD'
      

  4.   

    谢谢大家,问题已经解决了,把代码段2改成下面这样:
    window.onload=function()
    {
    for(var i=0;i<form1.length;i++){
      if((form1.elements[i].name=="checkbox") && form1.elements[i].checked==true){
        form1.elements[i].parentElement.parentElement.style.background="#336699";
      }else{
        form1.elements[i].parentElement.parentElement.style.background="#FFFFFF";
      }
     }
    }