明白了 我已经留下规则部分你自己写了
因为字数限制分2段发 首先是HTML<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
</head><body>
<table border="1" cellpadding="0" cellspacing="2" bordercolor="#000000" id="table1" align="right">
<tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td></tr>
<tr><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td></tr>
<tr><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td><td>29</td><td>30</td></tr>
</table>
<table border="1" cellpadding="0" cellspacing="2" bordercolor="#000000" id="table2" align="right">
  <tr>
    <td width="20" height="20" bordercolor="#999999" bgcolor="#FF0000">&nbsp;</td>
    <td width="20" align="center" bordercolor="#999999" id="sred">0</td>
  </tr>
  <tr>
    <td height="20" bordercolor="#999999" bgcolor="#FFFF00">&nbsp;</td>
    <td align="center" bordercolor="#999999" id="syellow">0</td>
  </tr>
  <tr>
    <td height="20" bordercolor="#999999" bgcolor="#0000FF">&nbsp;</td>
    <td align="center" bordercolor="#999999" id="sblue">0</td>
  </tr>
</table>
<table border="1" cellpadding="0" cellspacing="2" bordercolor="#000000" id="table3" align="right">
<tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr>
<tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr>
</table>
</body>
</html>

解决方案 »

  1.   

    接下来是脚本
    <script language="javascript">
    var boxs = new Array(); //元素缓存
    var groups = new Array(); //组集合
    var focusarray = 0; //指针
    //数量
    var cred = 0; 
    var cyellow = 0;
    var cblue = 0;
    //数量显示容器
    var ored = document.getElementById("sred");
    var oyellow = document.getElementById("syellow");
    var oblue = document.getElementById("sblue");
    //这个是table3的td集合
    var groupsObj = document.getElementById("table3").cells;//按键事件
    function document.onkeypress()
    {
    switch(window.event.keyCode)
    {
    case 45:
    arrmove(-1);break; //"-"
    case 43:
    case 13: //"+" 和 Enter
    arrmove(1);break;
    case 47: //"/"
    if(confirm("重置全部?"))
    for(var i=0;i<boxs.length;i++)
    changeColor(i,0);
    break;
    case 42://"*"
    changeColor(focusarray,0);break;
    case 49://"1"
    changeColor(focusarray,1);break;
    case 50://"2"
    changeColor(focusarray,2);break;
    case 51://"3"
    changeColor(focusarray,3);break;
    default:
    break;
    }
    }
    //方法:改变当前元素的颜色
    function changeColor(index,icolor)
    {
    var simg = "";
    //当前元素原颜色数量减1
    switch(boxs[index].scolor)
    {
    case 1: cred--;break;
    case 2: cyellow--;break;
    case 3: cblue--;break;
    }
    //新颜色数量加1 并获取新颜色
    switch(icolor)
    {
    case 0: simg = "";break;
    case 1: simg = "image1.gif";cred++;break;
    case 2: simg = "image2.gif";cyellow++;break;
    case 3: simg = "image3.gif";cblue++;break;
    }
    boxs[index].scolor = icolor;//记录颜色标记
    boxs[index].background = simg;//改变背景图
    //显示颜色计数
    ored.innerText = cred;
    oyellow.innerText = cyellow;
    oblue.innerText = cblue;
    //组处理
    var gindex = boxs[index].group;//获取当前组
    //以下就是你的规则
    var tempint = 0;//初始化一个数字
    for(var i=0;i<groups[gindex].length;i++)//循环当前组内每个元素
    {
    switch(groups[gindex][i].scolor)
    {
    case 0://白色
    tempint += 0;
    break;
    case 1://红
    tempint += 1;
    break;
    case 2://黄
    tempint += 2;
    break;
    case 3://蓝
    tempint += 3;
    break;
    }
    }
    //规则到此结束
    groupsObj[gindex].innerText = tempint;//将数字显示在table3中相应的位置
    }
    //方法 指针移动
    function arrmove(num)
    {
    boxs[focusarray].borderColor = "#999999";//改变前指针所指元素的边框颜色
    focusarray+=num;//改变指针
    //防止溢出
    if(focusarray<0)focusarray+=30;
    if(focusarray>29)focusarray-=30;
    boxs[focusarray].borderColor = "#FF0000";//改变当前指针所指元素的边框颜色
    }function window.onload()
    {
    var tablebox = document.getElementById("table1");
    var temparr = new Array();//创建一个新组
    for(var i=0;i<tablebox.cells.length;i++)
    {
    //分组过程
    if(i!=0 && i%4==0)
    {
    groups.push(temparr);//将一个组放入 组的集合里
    temparr = new Array(); //创建一个新组
    }
    var tempobj = tablebox.cells[i];
    with(tempobj)
    {
    onclick = function(){arrmove(this.boxindex-focusarray);}//添加鼠标单击时事件
    style.cursor = "hand";//鼠标指针
    align = "center";//对齐
    width = 20;//宽
    height = 20;//高
    borderColor = "#999999";//边框颜色
    setAttribute("boxindex",i);//位置标记
    setAttribute("scolor",0);//颜色标记
    setAttribute("group",groups.length)
    }
    boxs.push(tempobj);//加入缓存
    temparr.push(tempobj);//加入组
    }
    if(i%4>0)groups.push(temparr);//将 最后几个单元格(不足4个的组)加入组集合 想丢掉这多余的几个就不要这行
    //设置table3的基本属性
    tablebox = document.getElementById("table3");
    for(var i=0;i<tablebox.cells.length;i++)
    {
    var tempobj = tablebox.cells[i];
    with(tempobj)
    {
    align = "center";//对齐
    width = 20;//宽
    height = 20;//高
    borderColor = "#999999";//边框颜色
    }
    }
    focusarray = 0;//指针归零
    arrmove(0);//触发方法
    //显示颜色计数归零
    ored.innerText = 0;
    oyellow.innerText = 0;
    oblue.innerText = 0;
    }
    </script>
      

  2.   

    大大厉害了~~~~~最后请问,2、3可否实现?2、html页面内,有5个内容不同的<input name="???" type="text">文本域,按一次小键盘的 . 键,可以依次移动焦点(1 -> 5),5之后的焦点不是返回1,而是返回table1内的焦点(最好能返回按 . 键前的焦点);
    3、当焦点停留在某个文本域内时,可以修改其内容,但不影响原表格1内的颜色改变(现在会影响的);怕结贴之后不能问了,所以晚些发分,希望不要见怪,:)
      

  3.   

    哦 不好意思忘了这功能了再发 先是HTML<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title></title>
    </head><body>
    1:<input type="text" name="inputbox" size="10">
    2:<input type="text" name="inputbox" size="10">
    3:<input type="text" name="inputbox" size="10">
    4:<input type="text" name="inputbox" size="10">
    5:<input type="text" name="inputbox" size="10"><table border="1" cellpadding="0" cellspacing="2" bordercolor="#000000" id="table1">
    <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td></tr>
    <tr><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td></tr>
    <tr><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td><td>29</td><td>30</td></tr>
    </table>
    <table border="1" cellpadding="0" cellspacing="2" bordercolor="#000000" id="table2">
      <tr>
        <td width="20" height="20" bordercolor="#999999" bgcolor="#FF0000">&nbsp;</td>
        <td width="20" align="center" bordercolor="#999999" id="sred">0</td>
      </tr>
      <tr>
        <td height="20" bordercolor="#999999" bgcolor="#FFFF00">&nbsp;</td>
        <td align="center" bordercolor="#999999" id="syellow">0</td>
      </tr>
      <tr>
        <td height="20" bordercolor="#999999" bgcolor="#0000FF">&nbsp;</td>
        <td align="center" bordercolor="#999999" id="sblue">0</td>
      </tr>
    </table>
    <table border="1" cellpadding="0" cellspacing="2" bordercolor="#000000" id="table3">
    <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr>
    <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr>
    </table>
    </body>
    </html>
      

  4.   

    再是脚本<script language="javascript">
    var boxs = new Array(); //元素缓存
    var groups = new Array(); //组集合
    var focusarray = 0; //指针
    var inputsarray = 0;//输入框指针
    var inputflag = false;//输入标记
    //数量
    var cred = 0; 
    var cyellow = 0;
    var cblue = 0;
    //数量显示容器
    var ored = document.getElementById("sred");
    var oyellow = document.getElementById("syellow");
    var oblue = document.getElementById("sblue");var groupsObj = document.getElementById("table3").cells;//table3的td集合
    var inputs = document.getElementsByName("inputbox"); //input集合 如果input的name不相同 则用下面的
    //var inputs = new Array();
    //inputs.push(document.getElementById("input1"));
    //inputs.push(document.getElementById("input2")); ....//按键事件
    function document.onkeypress()
    {
    switch(window.event.keyCode)
    {
    case 45:
    if(!inputflag)arrmove(-1);break; //"-"
    case 43:
    case 13: //"+" 和 Enter
    if(!inputflag)arrmove(1);break;
    case 47: //"/"
    if(confirm("重置全部?"))
    for(var i=0;i<boxs.length;i++)
    changeColor(i,0);
    break;
    case 42://"*"
    changeColor(focusarray,0);break;
    case 49://"1"
    changeColor(focusarray,1);break;
    case 50://"2"
    changeColor(focusarray,2);break;
    case 51://"3"
    changeColor(focusarray,3);break;
    case 46://"."
    moveinput();//触发方法
    return false; //取消输入 如果需要输入 "." 则注释掉 但会冲突
    break;
    default:
    break;
    }
    }
    //方法:按下"."
    function moveinput()
    {
    if(!inputflag)
    {
    //输入开关false
    inputs[0].focus(); //聚焦第一个input
    }
    else
    {
    //输入开关true
    inputs[inputsarray].blur(); //取消聚焦 当前input
    if(inputs[inputsarray+1]) //如果不是最后一个input
    inputs[inputsarray+1].focus(); //聚焦下一个input
    else
    {
    inputflag = false; //输入标记 false
    arrmove(0);//返回table1
    }
    }
    }
    //方法:改变当前元素的颜色
    function changeColor(index,icolor)
    {
    if(inputflag)return;
    var simg = "";
    //当前元素原颜色数量减1
    switch(boxs[index].scolor)
    {
    case 1: cred--;break;
    case 2: cyellow--;break;
    case 3: cblue--;break;
    }
    //新颜色数量加1 并获取新颜色
    switch(icolor)
    {
    case 0: simg = "";break;
    case 1: simg = "image1.gif";cred++;break;
    case 2: simg = "image2.gif";cyellow++;break;
    case 3: simg = "image3.gif";cblue++;break;
    }
    boxs[index].scolor = icolor;//记录颜色标记
    boxs[index].background = simg;//改变背景图
    //显示颜色计数
    ored.innerText = cred;
    oyellow.innerText = cyellow;
    oblue.innerText = cblue;
    //组处理
    var gindex = boxs[index].group;//获取当前组
    //以下就是你的规则
    var tempint = 0;//初始化一个数字
    for(var i=0;i<groups[gindex].length;i++)//循环当前组内每个元素
    {
    switch(groups[gindex][i].scolor)
    {
    case 0://白色
    tempint += 0;
    break;
    case 1://红
    tempint += 1;
    break;
    case 2://黄
    tempint += 2;
    break;
    case 3://蓝
    tempint += 3;
    break;
    }
    }
    //规则到此结束
    groupsObj[gindex].innerText = tempint;//将数字显示在table3中相应的位置
    }
    //方法 指针移动
    function arrmove(num)
    {
    boxs[focusarray].borderColor = "#999999";//改变前指针所指元素的边框颜色
    focusarray+=num;//改变指针
    //防止溢出
    if(focusarray<0)focusarray+=30;
    if(focusarray>29)focusarray-=30;
    boxs[focusarray].borderColor = "#FF0000";//改变当前指针所指元素的边框颜色
    }function window.onload()
    {
    var tablebox = document.getElementById("table1");
    var temparr = new Array();//创建一个新组
    for(var i=0;i<tablebox.cells.length;i++)
    {
    //分组过程
    if(i!=0 && i%4==0)
    {
    groups.push(temparr);//将一个组放入 组的集合里
    temparr = new Array(); //创建一个新组
    }
    var tempobj = tablebox.cells[i];
    with(tempobj)
    {
    onclick = function(){arrmove(this.boxindex-focusarray);}//添加鼠标单击时事件
    style.cursor = "hand";//鼠标指针
    align = "center";//对齐
    width = 20;//宽
    height = 20;//高
    borderColor = "#999999";//边框颜色
    setAttribute("boxindex",i);//位置标记
    setAttribute("scolor",0);//颜色标记
    setAttribute("group",groups.length)
    }
    boxs.push(tempobj);//加入缓存
    temparr.push(tempobj);//加入组
    }
    if(i%4>0)groups.push(temparr);//将 最后几个单元格(不足4个的组)加入组集合 想丢掉这多余的几个就不要这行
    //设置table3的基本属性
    tablebox = document.getElementById("table3");
    for(var i=0;i<tablebox.cells.length;i++)
    {
    var tempobj = tablebox.cells[i];
    with(tempobj)
    {
    align = "center";//对齐
    width = 20;//宽
    height = 20;//高
    borderColor = "#999999";//边框颜色
    }
    }
    for(var i=0;i<inputs.length;i++)
    {
    inputs[i].setAttribute("sindex",i);//添加一个index属性
    inputs[i].onfocus = function() //当聚焦时事件
    {
    inputflag = true; //输入开关
    inputsarray = this.sindex; //设定input指针
    boxs[focusarray].borderColor = "#999999";//改变前指针所指元素的边框颜色
    }
    }
    focusarray = 0;//指针归零
    arrmove(0);//触发方法
    //显示颜色计数归零
    ored.innerText = 0;
    oyellow.innerText = 0;
    oblue.innerText = 0;
    }
    </script>
      

  5.   

    天啊,还能说什么呢,gzdiablo简直就是神一样的人物~~~~~100分,完美的100分。我在珠海,不知道你是哪里人呢,我想请你吃饭!(*^__^*)