<table onclick=a() border>
<tr>
<td>aaaaaaaaaaa</td><td>aaaaaaaaaaa</td>
</tr>
<tr>
<td>aaaaaaaaaaa</td><td>aaaaaaaaaaa</td>
</tr>
<tr>
<td>aaaaaaaaaaa</td><td>aaaaaaaaaaa</td>
</tr>
</table>
<script>
function a()
{
o=event.srcElement
if(o.tagName!="TD")
o=o.parentElement
if(o.tagName!="TD") return
var c=o.cellIndex;
if(o.tagName!="TR")
o=o.parentElement
var r=o.rowIndex;
alert(r+"行" + c + "列")
}
</script>

解决方案 »

  1.   

    谢大虾。我的理解,不管我把事件代码写在table还是tr,event.srcElement都是表格的单元格(除了少数例外情况,比如单击了表格的分隔线)。
    我本以为把事件代码写在table的onclick中,那么event.srcElement就应该是表格整体而不应该是单元格。我的这个理解为什么不对呢?
    是不是event.cancelBubble为false,事件冒泡的结果,使得由表格的事件程序处理单元格的事件?
      

  2.   

    另外,我主要想知道如何从表格对象出发得到发出事件的单元格。孟老大的程序对此略有瑕疵(信口雌黄,不好意思)。
    如果我在表格的单元分隔线上单击,经过alert(o.id)这样的测试,得到的srcElement就是整个表格。于是程序的运行就不正常了。
    在这种情况下(单击点在单元格线上),应该只能得到所在的行(在上下外边框得到列)了,如何得到?
      

  3.   

    其实二楼的程序就是绑定到body上也是管用的
    单击点在单元格线上,要得到所在行,恐怕要用到event.y计算像素
      

  4.   

    谢楼上,
    那么“我本以为把事件代码写在table的onclick中,那么event.srcElement就应该是表格整体而不应该是单元格。我的这个理解为什么不对呢?
    是不是event.cancelBubble为false,事件冒泡的结果,使得由表格的事件程序处理单元格的事件?”
    这个理解对吗?
      

  5.   

    不知道楼主想要知道的东西有什么应用的例子吗?
    table的click事件调用的时候onclick="tableClick(this)" 这个this就是表格了
    然后用this遍历所有列(rows cells 循环),和event.srcElement相同的对象就是那列了
      

  6.   

    不知道楼主想要知道的东西有什么应用的例子吗?
    table的click事件调用的时候onclick="tableClick(this)" 这个this就是表格了
    然后用this遍历所有列(rows cells 循环),和event.srcElement相同的对象就是那列了以上所言也和孟大虾的做法有相同的小瑕疵(其实也算不上瑕疵),如果单击在表格线上的话,srcElement就是表格本身了。
    孟大虾的处理就是如果你单击表格线的话--》这么变态,不理你了。