html给表格每个单元格绑定上下左右键盘事件,包含具体移动逻辑的原生js代码
时间: 2024-09-19 15:12:09 浏览: 12
在HTML中,你可以利用原生JavaScript来为表格的每个单元格(`<td>`或`<th>`)添加键盘事件监听器,以便用户通过箭头键进行行内移动。下面是一个简单的示例,展示了如何实现这个功能:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Table Keyboard Navigation</title>
</head>
<body>
<table id="myTable">
<tr>
<td contenteditable="true" class="cell">Cell 1</td>
<td contenteditable="true" class="cell">Cell 2</td>
<td contenteditable="true" class="cell">Cell 3</td>
</tr>
<!-- Add more rows as needed -->
</table>
<script>
const table = document.getElementById('myTable');
const cells = table.querySelectorAll('td.cell');
// Function to handle key events
function moveCell(event) {
const currentCell = event.target;
let direction = '';
switch (event.key) {
case 'ArrowUp':
if (currentCell.previousElementSibling) {
direction = 'previous';
}
break;
case 'ArrowDown':
if (currentCell.nextElementSibling) {
direction = 'next';
}
break;
case 'ArrowLeft':
if (currentCell.previousElementSibling && currentCell.parentNode.lastChild !== currentCell) {
direction = 'prevRowPrevious';
}
break;
case 'ArrowRight':
if (currentCell.nextElementSibling && currentCell.parentNode.firstElementChild !== currentCell) {
direction = 'nextRowNext';
}
break;
default:
return;
}
// Move the cell based on the direction
if (direction) {
let target = direction === 'previous' ? currentCell.previousElementSibling : currentCell.nextElementSibling;
while (target && !target.classList.contains('cell')) {
target = target.parentElement;
}
if (target) {
[currentCell, target].forEach(cell => cell.focus());
} else {
console.log("Invalid move");
}
}
}
// Attach event listeners to each cell
cells.forEach(cell => cell.addEventListener('keydown', moveCell));
</script>
</body>
</html>
```
在这个例子中,我们首先获取了所有的单元格,然后为每个单元格绑定了`keydown`事件。当用户按下箭头键时,会调用`moveCell`函数,判断移动的方向并切换焦点到目标单元格。