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

时间:2010-04-21 17:49:27

标签: javascript events

我在想是否有一个更好的解决方案,可以为表格中的每个单元格添加onclick处理程序,而不是这种方法:Adding an onclick event to a table row

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

我只需要获取用户点击的单元格的协调。

谢谢!

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

2 个答案:

答案 0 :(得分:7)

你在找这个吗?

$(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评论更新:

要获得topleft值,您可以尝试:

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

正如您的其他评论所示,您可能希望获取所点击单元格的ID,您可以尝试这样做:

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

但是为了使上述工作正常,假设所有单元格都已具有id属性。

答案 1 :(得分:0)

您正在寻找活动委派。

http://icant.co.uk/sandbox/eventdelegation/

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

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

这样可以让您动态添加更多表格单元格,而无需为所有表格单元格添加处理程序。

jQuery特别是使用这种方法的优秀委托方法。 http://api.jquery.com/delegate/