为什么选项卡键盘导航不适用于 tabIndex 集?
Why is tab keyboard navigation not working with tabIndex set?
考虑这个 HTML table:
<table contenteditable="true">
<tbody>
<tr>
<td tabindex="0"></td>
<td tabindex="0"></td>
<td tabindex="0"></td>
</tr>
<tr>
<td tabindex="0"></td>
<td tabindex="0"></td>
<td tabindex="0"></td>
</tr>
</tbody>
</table>
我希望用户能够在编辑 table 内容时从一个单元格切换到另一个单元格,并以编程方式关注任何给定的单元格。我在 Chrome 中观察到以下行为,我正在尝试理解并纠正它们:
我不明白为什么如果我将光标放在一个单元格中并按 tab
键,光标不会转到下一个单元格。
我不明白为什么当我点击一个单元格时,虽然光标出现并且我可以编辑它的内容,但焦点似乎仍然集中在整个 table 而不是特定的单元格上(通过控制台日志发现document.activeElement
)
我不明白为什么当我在 Javascript 中执行 myCell.focus()
时,即使单元格变成了 activeElement
并且光标没有出现在有问题的单元格中table 整体有 contenteditable="true"
最好在每个td
中使用input
个元素,然后使用这个函数:
js
$('td').bind('keypress', function(event) {
if(event.which === 9) {
if ($(this).next().length > 0){
$(this).next().find("input").focus();
}else{
$(this).parent().next().find('td').first().find("input").focus();
}
});
html
<table contenteditable="true">
<tbody>
<tr>
<td tabindex="0"><input /></td>
<td tabindex="0"><input /></td>
<td tabindex="0"><input /></td>
</tr>
<tr>
<td tabindex="0"><input /></td>
<td tabindex="0"><input /></td>
<td tabindex="0"><input /></td>
</tr>
</tbody>
</table>
为了在 Chrome 76 和 Firefox 68 上使用 tab 键,我需要将 table 本身设置为不是 editable,然后还要将每个单元格设置为editable:
<table contenteditable="false">
<tbody>
<tr>
<td contenteditable="true"></td>
<td contenteditable="true"></td>
<td contenteditable="true"></td>
</tr>
<tr>
<td contenteditable="true"></td>
<td contenteditable="true"></td>
<td contenteditable="true"></td>
</tr>
</tbody>
</table>
考虑这个 HTML table:
<table contenteditable="true">
<tbody>
<tr>
<td tabindex="0"></td>
<td tabindex="0"></td>
<td tabindex="0"></td>
</tr>
<tr>
<td tabindex="0"></td>
<td tabindex="0"></td>
<td tabindex="0"></td>
</tr>
</tbody>
</table>
我希望用户能够在编辑 table 内容时从一个单元格切换到另一个单元格,并以编程方式关注任何给定的单元格。我在 Chrome 中观察到以下行为,我正在尝试理解并纠正它们:
我不明白为什么如果我将光标放在一个单元格中并按 tab
键,光标不会转到下一个单元格。
我不明白为什么当我点击一个单元格时,虽然光标出现并且我可以编辑它的内容,但焦点似乎仍然集中在整个 table 而不是特定的单元格上(通过控制台日志发现document.activeElement
)
我不明白为什么当我在 Javascript 中执行 myCell.focus()
时,即使单元格变成了 activeElement
并且光标没有出现在有问题的单元格中table 整体有 contenteditable="true"
最好在每个td
中使用input
个元素,然后使用这个函数:
js
$('td').bind('keypress', function(event) {
if(event.which === 9) {
if ($(this).next().length > 0){
$(this).next().find("input").focus();
}else{
$(this).parent().next().find('td').first().find("input").focus();
}
});
html
<table contenteditable="true">
<tbody>
<tr>
<td tabindex="0"><input /></td>
<td tabindex="0"><input /></td>
<td tabindex="0"><input /></td>
</tr>
<tr>
<td tabindex="0"><input /></td>
<td tabindex="0"><input /></td>
<td tabindex="0"><input /></td>
</tr>
</tbody>
</table>
为了在 Chrome 76 和 Firefox 68 上使用 tab 键,我需要将 table 本身设置为不是 editable,然后还要将每个单元格设置为editable:
<table contenteditable="false">
<tbody>
<tr>
<td contenteditable="true"></td>
<td contenteditable="true"></td>
<td contenteditable="true"></td>
</tr>
<tr>
<td contenteditable="true"></td>
<td contenteditable="true"></td>
<td contenteditable="true"></td>
</tr>
</tbody>
</table>