我正在用 HTML/JS 制作一个网格控件,我希望它的行为尽可能像 Excel。我已经完成了大部分导航和编辑工作,但有一件事我想不通,我在网上找到的所有内容都不适用于我的情况。
首先我要解释一下我是如何实现它的: 我已经使用表格制作了网格并在每个 td 中插入了一个文本框。除非您双击单元格(很像在 Excel 中),否则文本框不会获得焦点。换句话说,单击一个单元格只需将其选中,然后双击即可对其进行编辑。您可以使用箭头键四处导航,这是通过在文档上附加一个按键事件处理程序来完成的。
现在,当一个单元格被选中时,我希望能够通过键入来开始编辑它。为此,我在我的事件处理程序中添加了一些代码来控制导航,检查用户是否正在键入可见字符 (e.charCode != 0) 并将焦点设置在所选单元格的文本框中。除了用户键入的第一个字符未被文本框接收外,这工作正常。显然 .trigger 是可行的方法;这是我到目前为止尝试过的方法
self.editCell.trigger(jQuery.Event('keypress', {which: e.charCode}));
我尝试传递更多参数,如 keyCode、charCode 等,但没有成功。
那么将击键传递给输入控件的最佳方式是什么?
最佳答案
您要更改的唯一行为是您想要使用箭头键在其他单元格之间导航,对吗?
为什么不让 native 代码处理繁重的工作并只检测方向键的使用,而不是将操作列入白名单?
类似于:
function cellKeyDown(e) {
if (e.keyCode > 36 && e.keyCode < 40) {
// select a new cell
}
}
关于javascript - 使用 jQuery 将事件转发到另一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6970125/