【问题标题】:JQuery DataTable KeydownjQuery DataTable 按键
【发布时间】:2013-01-30 19:16:17
【问题描述】:

我在使用 JQuery DataTable 捕获 keydown 事件时遇到问题。我的目标是允许用户使用箭头键导航表格的行。因此,当用户按下箭头键时,我想捕获 keydown 事件并移动表的选定行(这是我使用选定行的类在数据表外部跟踪的内容)。但是,我似乎无法捕捉到 keydown 事件。

例如,下面的代码不起作用:

$('#myTable tbody').keydown(function (event){...});

我的想法是问题是表没有焦点,但也许这是错误的路径。例如,即使我添加以下内容,我也不会使用上面的代码捕获 keydown 事件:

 $('#myTable tbody').click(function(e){ $('#myTable tbody').focus();});

我可以用 $(document) 捕捉到 keydown,但这是不可取的。

谢谢。

【问题讨论】:

  • 你想做什么?您是否正在寻找一个委托处理程序,例如:$('#myTable').on('keydown', 'input', function(ev){ ... }); 不确定您为什么要将焦点放在表本身上,我猜您想专注于表中包含的某些内容。你能详细说明一下吗?
  • 我改进了我的描述,以便为我正在尝试做的事情提供更好的理由。试图把注意力集中在桌子上是我走下去让桌子捕捉 keydown 事件的途径,但这可能是不必要的。我只想让用户使用箭头键导航表格的行(选定的行用于在不同的窗格中填充数据)。

标签: jquery datatable keydown


【解决方案1】:

这是一个可行的解决方案...代码可以稍微清理一下(并且存在错误,例如没有限制检查),但效果就在那里:

http://jsfiddle.net/BLSully/Xdkea/

“键”为表格提供了一个 tabindex,因此它变得“可聚焦”。它不需要为零,但它需要是“某物”,以便按键事件对其起作用

<table id="myTable" tabindex=0>
    <tbody>
        <tr><td>Row 1</td></tr>
        <tr><td>Row 2</td></tr>
        <tr><td>Row 3</td></tr>
        <tr><td>Row 4</td></tr>
        <tr><td>Row 5</td></tr>
    </tbody>
</table>

JavaScript:

$(function(){
    var focusedRow = null;
    $('#myTable').on('keydown', function(ev){
        console.log(ev.keyCode);
        if(focusedRow == null) {
            focusedRow = $('tr:nth-child(1)', '#myTable');
        } else if(ev.keyCode === 38) {
            focusedRow.toggleClass('focused');
            focusedRow = focusedRow.prev('tr');
        } else if(ev.keyCode === 40) {
            focusedRow.toggleClass('focused');
            focusedRow = focusedRow.next('tr');
        }
        focusedRow.toggleClass('focused');
    });
    $('#myTable').focus();
});

【讨论】:

  • tabindex 是诀窍!谢谢!此外,如果其他人看到这个答案,在点击处理程序中设置焦点似乎会为界面产生自然的感觉行为 - 至少在初始测试中是这样。
  • 我直接进入代码并跳过了你答案中这个非常重要的部分:The 'key' is giving the table a tabindex so it becomes "focusable"(非常好的解决方案,如果需要,css 也可以删除奇怪的焦点边框)
猜你喜欢
  • 2016-03-28
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
相关资源
最近更新 更多