You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改表格TD的colspan后如何让TAB键焦点跳转至相邻下一个输入框

表格输入框焦点跳转问题

我希望无需提前知晓下一个元素是什么,就能通过TAB键将焦点移动到下一个输入元素。

背景

我有一个表格,可用屏幕空间非常有限。表格中有一列的文本字段可能容纳的内容超出列宽,为了让用户输入文本时无需在输入框内滚动就能查看全部内容,我需要在输入框获得焦点时放大/加宽输入框,失去焦点时恢复原尺寸。
但我不希望直接放大输入框所在的列,否则这类输入框获得/失去焦点时会触发整个表格持续重绘,对用户来说观感很差,也容易造成困惑。

当前实现方案

当需要放大的输入元素触发onfocus事件时,我将该元素所在TD的colspan属性设置为X(X为该TD需要跨的列数),同时将同一TR中、该聚焦输入框所在TD右侧的X-1个TD设置为display: none。
当触发onblur事件时,我会还原所有修改:失去焦点的输入框所在TD的colspan恢复为1,其右侧的X-1个TD重新设置为display: table-cell。

遇到的问题

上述方案的重绘表现符合预期,只有轻微的“跳动”现象,但焦点不会移动到刚失去焦点的输入框相邻的、重新显示的下一个输入元素,而是会跳转到第一个未被隐藏的TD对应的输入框。

示例说明

假设存在一个5列3行的表格,每个TD都包含一个输入框。列编号为A到E,行编号为1到3,所有列宽度均为20%。仅当列A中某个TD的输入框获得焦点时,才放大该TD。
当A2获得焦点时,设置colspan=3,同时B2和C2设置为display: none。一旦A2的输入框触发onblur事件,所有修改还原:A2的colspan恢复为1,B2和C2恢复为display: table-cell。此时焦点落在D2上,这就是我遇到的问题。

已尝试的思路

  • 我知道可以维护一个存储所有输入元素引用的矩阵,再对应调用setFocus设置焦点,但这种方案需要大量关联逻辑,我非常不希望采用,而且大概率稳定性很差。
  • 最简单的方案是能够“重新计算”已经携带了下一个焦点目标的blur事件,显然当前计算焦点目标时没有把重新显示的隐藏元素纳入计算。
  • 另一种可选方案是可以直接执行类似“将焦点回移2个元素”的命令。
  • 第三种方案是将获得焦点的输入框从表格/TD中抽离,悬浮在表格上方,但还没找到对应的CSS实现方法。

内容的提问来源于stack exchange,提问作者robkuz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:36:04