表级别的键事件绑定

时间:2014-09-08 15:50:58

标签: javascript jquery

我在1页上有2张桌子。我希望用户能够单击该表,然后使用箭头键导航到上一个和下一个。我能够在所有浏览器中启动keyup事件的唯一方法是将它们直接附加到“文档”。我已经连接了一个事件,将一个“网格聚焦”类添加到焦点的网格中,我尝试将其用作我事件的选择器,但我无法获得任何事件操作。

事件绑定

function attachInitEvents() {
    if ($self.config.pageHotKeysEnabled) {
        var keyNav = function(e) {
            if (e.keyCode == 37 && paging.hasPrevious) { // left
                $self._log.info('Left arrow key pressed.');
                fetchData('prev');
            }
            if (e.keyCode == 39 && paging.hasNext) { //right
                $self._log.info('Right arrow key pressed.');
                fetchData('next');
            }
        }
        var $doc = $(document);

        // hot key support
        $doc.off('keyup');
        $doc.on('keyup', keyNav);
    }
}

我有另一个问题,我正在做$ doc.off('keyup')。我认为这是问题的一部分,因为它解除了所有keyup事件的绑定,我真正想要的是它只是取消绑定我试图附加的事件(如果它存在)。在jQuery文档中,技术上说我应该使用$ doc.off('keyup',keyNav);取消绑定它,但它没有解除绑定事件,我得到它的倍数。

所以核心问题是,

  1. 我是否可以在不绑定文档的情况下触发KeyUp事件,是否可以从表级执行此操作?
  2. 我怎样才能确保我不会一遍又一遍地重新绑定?现在,如果这个页面有2个表,我想我会期待那里 每个表一个是2个事件,然后是.grid聚焦的类 是什么允许事件触发?
  3. 这是一个小提琴:http://jsfiddle.net/93fp293w/

    基本上,我没有输入框只是跨越,我基本上只是使用箭头键让他们更容易翻阅所有数据。我相信小提琴手对这种情况非常准确。我觉得我所要求的是不可能的,因为我不会有一个实际的控制焦点,如果是这种情况我可以接受,但我想我希望有一个解决方法。

1 个答案:

答案 0 :(得分:1)

附加密钥的问题在于,父div必须是可变的(contenteditable)。否则你必须附在文件上。

我已经更新了小提琴,可能是一个黑客让我知道这是否适合你?

http://jsfiddle.net/puneethp/qfpyeydg/3/

$(document).on("keyup", function (e) {
e.target = $(".focus")[0];
..
}

如果你一次只关注一个专栏,那么我以前的小提琴仍然有用。