【问题标题】:Get the row id of html table after right click右键获取html表格的行id
【发布时间】:2013-08-27 06:27:35
【问题描述】:

我在这里要做的是捕获用户右键单击的每一行的 id。因此,如果用户右键单击 id=22 的行,那么我需要捕获“22”。我是 Jquery 的新手。

这是我目前所拥有的:

  $("tr").mousedown(function(event) {
    if (event.which === 3) {
      alert($(this).attr("id"));
    }
  });

但这并没有给我任何回报。每个<tr> 都附有一个id。如何获得它是个问题。

编辑:

即使使用“tr”,由于某种原因,我也无法检测到 mousedown 事件。

【问题讨论】:

  • 确保在文档准备好后绑定处理程序。旁注:you can always use this.id instead of $(this).attr("id").
  • 你能在 JSFiddle 中提供你的页面示例吗?
  • 我想我可能还有另一个问题,因为我什至没有检测到 mousedown 事件。我可以到达#tbl1 tbody,但这就是它的终点。如果我将 tr 添加到其中,我不会收到该事件。
  • 您知道,使用$("#tbl1").find('tbody').find('tr') 的速度几乎是$("#tbl1 tbody tr") 的两倍。这个页面可能不是问题,但养成使用find 的习惯是个好主意:)
  • 这也将有助于 hhttp://stackoverflow.com/questions/706655/bind-event-to-right-mouse-click

标签: jquery


【解决方案1】:

我认为数据表在 DOM 准备好后绑定,所以你可能需要这样做:

$(function() {
    $('#tbl1').on('contextmenu', 'tr', function(e) {
        e.preventDefault();
        alert(this.id);
    });
});

如果仍然不起作用,请尝试更详尽的测试:

$(function() {
    $('body').on('contextmenu', 'tr', function(e) {
        e.preventDefault();
        alert(this.id);
    });
});

您可以将.on() 与指定的参数一起使用,这样您就可以将事件侦听器附加到可用的已知dom 就绪时间元素。

第一个将事件监听器绑定到#tbl1,而最后一个将事件监听器附加到body。因此,每次右键单击正文内的任何内容都会检查该元素是否为tr 并触发。 由于该事件附加到body(并且它可能不会改变应用程序的使用)很可能会起作用但它会太宽所以如果你限制到@ 987654328它会更好(因为防止无用的检查) @ 或 div 它是数据表的父级,具体取决于数据表如何操作 DOM。

【讨论】:

  • 谢谢巴特。我现在要试试这个。
【解决方案2】:

DEMO HERE

根据您在 cmets 中提供的详细信息,您希望当您右键单击每一行时,警报会显示单击的 tr 元素的 id:

试试这个:

 $('#tbl1 tbody tr').mousedown(function(e){

    if(e.button==2) alert($(this).attr('id'));

 });

【讨论】:

    【解决方案3】:

    好的,根据您在我之前回答的评论中提出的问题,您应该更改您的问题以符合您的要求。您正在寻找右键单击鼠标 id show。

    这应该可行:

    $("#tbl1 tbody tr").bind("contextmenu",function(e) {
       e.preventDefault();
       alert($(this).attr('id'));
    });
    

    这是更新后的小提琴:Fiddle

    【讨论】:

      【解决方案4】:

      您的示例对我有用,没有任何问题。 http://jsfiddle.net/YzR47/

      $(document).ready(function() {
          $("#tbl1 tbody tr").mousedown(function(event) {
              if (event.which === 3) {
                alert($(this).attr("id"));
              }
            });
      });
      

      【讨论】:

      • 嗨,安东尼。我只是注意到我没有检测到 mousedown 事件。你知道这是为什么吗?
      • 如前所述,您确定您的tr 在您附加mousedown 句柄时确实存在吗?
      • @乔丹。现在,我不确定。我正在使用插件(数据表),所以我不确定。有办法告诉我吗?
      • @user1709311 在$("#tbl1 tbody tr").mousedown(function(event) { 行放置一个断点,然后将您的选择器输入浏览器控制台。看看它是否包含您期望的所有行。 Datatables 仅放置当前显示在页面上的行,因此如果您需要将它放在不同页面上的行上,则需要在重绘表时添加事件,但请确保检查给定行是否已经有事件与否,或者您可以添加多个!我过去曾与之合作过,向数据表添加事件可能很困难:(祝你好运!
      • @user1709311 您应该声明您在问题中使用了datatables。右键单击 tr 中的任何一个时,我发布的 jsfiddle 仍然没有问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多