我使用
HTML表创建了一个非常基本的电子表格.它完美无缺,但用户必须使用鼠标点击每个< td>为了编辑它.我正在使用jQuery捕获click事件并显示一个对话框来编辑它.我希望用户能够使用箭头键导航到每个单元格,单元格css背景更改以指示焦点,单击Enter键将触发jQuery对话框事件.我正在使用jQuery 1.9.
这里基本上是我的jsfiddle.
如何保存当前选定的单元格,以便在使用鼠标单击单元格,然后使用箭头键时,它将从“当前”单元格导航?
谢谢.
解决方法
下面是一个使用onkeydown事件并使用prevIoUsElementSibling和nextElementSibling属性的vanilla JavaScript解决方案.
https://jsfiddle.net/rh5aoxsL/
使用tabindex的问题在于,您无法像在Excel中那样导航,您可以远离电子表格本身.
HTML
<table> <tbody> <tr> <td id='start'>1</td> <td>2</td> <td>3</td> <td>4</td> </tr> <tr> <td>5</td> <td>6</td> <td>7</td> <td>8</td> </tr> <tr> <td>9</td> <td>10</td> <td>11</td> <td>12</td> </tr> <tr> <td>13</td> <td>14</td> <td>15</td> <td>16</td> </tr> </tbody> </table>
CSS
table { border-collapse: collapse; border: 1px solid black; } table td { border: 1px solid black; padding: 10px; text-align: center; }
JavaScript
var start = document.getElementById('start'); start.focus(); start.style.backgroundColor = 'green'; start.style.color = 'white'; function dotheneedful(sibling) { if (sibling != null) { start.focus(); start.style.backgroundColor = ''; start.style.color = ''; sibling.focus(); sibling.style.backgroundColor = 'green'; sibling.style.color = 'white'; start = sibling; } } document.onkeydown = checkKey; function checkKey(e) { e = e || window.event; if (e.keyCode == '38') { // up arrow var idx = start.cellIndex; var nextrow = start.parentElement.prevIoUsElementSibling; if (nextrow != null) { var sibling = nextrow.cells[idx]; dotheneedful(sibling); } } else if (e.keyCode == '40') { // down arrow var idx = start.cellIndex; var nextrow = start.parentElement.nextElementSibling; if (nextrow != null) { var sibling = nextrow.cells[idx]; dotheneedful(sibling); } } else if (e.keyCode == '37') { // left arrow var sibling = start.prevIoUsElementSibling; dotheneedful(sibling); } else if (e.keyCode == '39') { // right arrow var sibling = start.nextElementSibling; dotheneedful(sibling); } }