如果按下一个有效字符,如何检查div上的keydown



我已经检查过了,如果这是别人问的。但是,每个问题都是关于输入或文本区域,没有完美的答案给我。请注意,我希望这工作在div键下。我已经设置了div tabindex,我可以在keydown事件中获取该div的键代码。

我正在使用jQuery在javascript中创建电子表格。并且,在电子表格中,用户开始在任意行、任意列的任意单元格上键入。现在,我想检测是否按下了一个有效的字符,以便在选中的单元格中立即显示编辑文本框。

所以,当我转换keyCode字符使用String.fromCharCode,我得到一个字符的一切,即使它是shift键或ctrl键。所以,这不是我想要的。这将为shift &比如g

我不知道如何检查是否只有一个有效的字符,如a, h, 0, 7等被用户按下,这样我就可以像google sheets或microsoft excel那样立即向他展示编辑单元格。另外,我还可以检查>= 65等等。但是,我想让它适用于每种语言的每种类型的键盘。

我知道这是一项非常困难的工作,但我想知道谷歌和微软是如何做到的。

我自己解决的。

keydown事件为div发生时,我创建一个input框并将其附加到body,并将keyup事件附加到该输入框。在keyup事件中,我可以很容易地发现是否键入了某些内容。如果输入了什么,那么用户想要编辑单元格,否则我可以检查特殊键,如Ctrl+结束Ctrl+Home等等。

请注意,当用户开始输入时,输入看起来很烦人。所以,我把它放在-1000pxposition:absolute的某个地方。我还尝试使输入框widthheight 0,但后来我无法从框中读取.val()。所以,我用position:absolute; left:-1000px代替。

可能这有助于别人在任何其他相关的事情。下面是代码。

$(spreadsheet).keydown(function(e) {
if (e.keyCode == /*movement_keys*/) {
    //move between cells
} else {
    var input = $('<input type="text"  style="position:absolute; left: -1000px; top: 0px;"/>').appendTo('body');
    $(input).focus();
    $(input).keyup(function(e) {
        if ($(this).val() != '') {
            setTimeout(function() { spreadsheet.editCell($(this).val()); }, 1);
        }
        $(this).remove();
        $(spreadsheet).focus();
    });
}

});

我必须等待1ms使用setTimeout功能使焦点完美,否则焦点不会在单元格编辑器上进行。

最新更新