如何判断当前是否处于HTML表格的最后一行?

19
我有一个 keydown 事件,用于向表格中添加空白行。但是只有当光标在表格的最后一行时,才希望添加新行。这是我当前的 jQuery 事件。.glCreditValue 是输入文本框的类,该文本框位于表格行的最后一个 TD 中。因此,当用户离开该输入框时,如果包含输入框的 TD 在表格的最后一行,则要添加新行。由于表格数据是动态生成的,每行的最后一个 TD 都有一个类为 .glCreditValue 的输入文本框。
$(".glCreditValue").keydown(function(event) {
        var keycode = event.keyCode;
        if (keycode == 9) {
            //HERE i would like to make sure that i'm in the last row of the table
            AddNewRow();
        }
    });

我试图利用tr:last选择器,但我不确定该从哪里开始。


你想处理整个最后一行的点击还是只有最后一列的最后一行的点击? - Emmett
只有最后一列,这就是为什么我只指定.glCreditValue keydown的原因。 每行中最后一个TD中的输入文本框才被分配了该类。 - ghost_mv
2个回答

34

有几种方法可以做到这一点,例如您可以检查 .closest() 父级 <tr> 并查看它是否是 .is() 一个 :last-child,像这样:

$(".glCreditValue").keydown(function(event) {
  if (event.which == 9 && $(this).closest("tr").is(":last-child")) {
      AddNewRow();
  }
});

做到了!谢谢!当它让我这样做时,我会在大约6分钟内“接受”它作为我的答案,哈哈。 - ghost_mv
@Nick,不好意思又挖出一个老问题,但是将条件语句中加入检查Shift键是否按下会有用/明智吗?这样可以防止“向左制表符”触发条件语句,对吧?无论如何,回答很棒... :] - Tieson T.
@Tieson - 当然,这取决于您想要的UI行为。如果您想要防止Shift键执行此操作,则只需在该if检查的开头添加!event.shiftKey &&即可。从UI角度来看,我希望Shift版本可以撤消新行(仅当它为空时?),因此这将需要一些额外的代码。 - Nick Craver

6

一种避免运行选择器开销的方法是简单地获取 .closest(),然后转到 .next() 元素 并测试 .length 属性

如果你在最后一个 <tr> 上,.length 将为 0

if( !$(this).closest('tr').next().length ) {
   // was the last row
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接