如何在Javascript中为表中的每个单元格钩住onclick事件?

如何在Javascript中为表中的每个单元格钩住onclick事件?,javascript,events,Javascript,Events,我在想,是否有比这种方法更好的解决方案可以将onclick处理程序添加到表中的每个单元格中: 更好的是,我不需要为每个单元格设置“cell.onclick=function” 我只需要获得用户单击的单元格的坐标 谢谢 编辑:“坐标”表示左上角单元格为0x0,第一行第二个单元格为0x1,等等。您在找这个吗 $(function(){ $("#tableId tr td").click(function(event) { alert(event.pageX); a

我在想,是否有比这种方法更好的解决方案可以将onclick处理程序添加到表中的每个单元格中:

更好的是,我不需要为每个单元格设置“cell.onclick=function”

我只需要获得用户单击的单元格的坐标

谢谢


编辑:“坐标”表示左上角单元格为0x0,第一行第二个单元格为0x1,等等。

您在找这个吗

$(function(){
    $("#tableId tr td").click(function(event) {
       alert(event.pageX);
       alert(event.pageY);
    });
});
如果表格单元格是动态生成的:

$(function(){
    $("#tableId tr td").live('click', function(event) {
       alert(event.pageX);
       alert(event.pageY);
    });
});

根据OP评论进行更新: 要获取
top
left
值,您可以尝试以下方法:

$(function(){
    $("#tableId tr td").click(function(event) {
       alert($(this).offset().top);
       alert($(this).offset().left);
    });
});
$(function(){
    $("#tableId tr td").click(function(event) {
       alert($(this).attr('id'));
    });
});
如您的其他评论所示,您可能正在查找单击单元格的ID,您可以尝试以下操作:

$(function(){
    $("#tableId tr td").click(function(event) {
       alert($(this).offset().top);
       alert($(this).offset().left);
    });
});
$(function(){
    $("#tableId tr td").click(function(event) {
       alert($(this).attr('id'));
    });
});

但是,为了使上述方法起作用,假设所有单元格都已具有
id
属性。

您正在寻找事件委派

在其他例子中。基本上,观察一些更高的容器,例如click事件的表,然后通过检查传递给事件处理程序的事件来确定是否需要处理它

因此,如果单击发生在表内部,您可以确定事件的目标,并假设存在有效的td present来处理事件

这样做的好处是允许您动态添加更多的表单元格,而无需向所有单元格添加处理程序

jQuery尤其是作为使用这种方法的优秀委托方法。

使用JQuery并将一个函数绑定到所有
的click事件:
$(“td”).live('click',function(){})第一个示例有效,但我需要的不是像素位置,而是表格中的位置(如左上角单元格的0x0)。我可以将坐标添加为单元格的ID-如果我可以从“事件”中获取单击单元格的ID,这将很好。@MartyIX:不可能从事件对象中获取ID。$(“#”+this.ed+“tr td”)。单击(函数(事件){$.dump(this.id);});这对我很有用,是的,它不是来自事件对象。@MartyIX:我已经更新了我的答案,尽我所能理解你的问题和你的评论。谢谢