处理或多/少像电子表格一样操作的 HTML 控件 - 带有可编辑数据单元格的矩阵。When it comes to cells derived from a SELECT I'm having an issue getting the correct behavior when that type of cell is selected for edit:
如果我使用其默认格式(大小 = 0)呈现 Select,则用户将获得 Select 的 Enter 键处理的不适当行为:
- 第一次 Enter => 激活单元格上的编辑(显示选择控件)
- 第二次 Enter => 展开选择以显示选项
- 用户使用 up/dn 键进行选择
- 第三次 Enter => 关闭列表。(问题:此 Enter 对“keydown”事件处理程序隐藏)
- 第 4 次 Enter => 需要触发事件侦听器以停用单元格编辑。
另一方面,如果选择呈现为列表框(例如,大小 = 3),则 Enter 键行为正是我正在寻找的(意思是,上面列表中的 #2 和 #3 不再必需),但是因为列表现在显示在控件内部(而不是作为弹出窗口),它会放大单元格/行的大小。
那么,有没有办法“挂钩”到上面的第三个 Enter 键事件,或者在处理 Enter 键时改变 Select 的行为的其他一些相对直接的方法?
注意:我们没有使用任何 3rd 方库(阅读:jQuery 等)
编辑:这是事件监听器(通过典型的“addEventListener(...)”附加
this.e_sKeyDown = function(control, event) {
switch(event.keyCode) {
case 13: // enter
control.blur()
break
case 27: // esc = reset selection to it previous value
control.setAttribute("data-cancelModify", "true")
control.blur()
break
}
}
第二次编辑:根据评论/建议,我已经添加/尝试过:
this.e_sOnChange = function(control, event) {
control.blur()
}
该事件将触发,但它会针对每个不同的 Option/s 触发。换句话说,我似乎没有任何方法可以确定这是用户实际打算选择的选项,还是只是沿途遍历的选项。为了演示,这里是 jquery 站点的任何示例。请注意文本如何随每次上/下而变化,无论 Enter 键如何:
已解决:感谢所有评论者的建议。事实上,解决方案(无论如何对于我的情况)是在混合中添加一个“keyup”事件监听器。我不能说这将在哪些浏览器中运行,但它在更高版本的 Chrome 中是可用的。