Javascript - 拦截键盘按下

时间:2012-08-17 17:12:03

标签: javascript jquery javascript-events

我有一个始终具有焦点的输入框。进入此输入框的命令始终是字母。如果用户按下一个数字,我希望它不会被添加到文本框中,而是用它来运行不同的命令(就像热键一样)。

我看到这个实现的方式是通过查看keyup事件并删除不需要的字符。相反,有没有办法拦截键盘输入并检查插入前的值是什么?

我考虑过使用div创建自定义输入字段并拦截所有键盘命令。有没有办法让一个闪烁的插入符号看起来像一个输入框?

4 个答案:

答案 0 :(得分:7)

听起来你想要一个contenteditable div:

<div id="editor" contenteditable="true"></div>

您可以收听keydown个事件,如果它们不是字母则会阻止它们:

$("#editor").keydown(function (e) {
    if (e.which > 90 || (e.which > 48 && e.which < 65)) {
        e.preventDefault();
    }
});

要将这些数字作为“热键”处理,您只需确定哪个键e.which并采取相应的行动。

示例: http://jsfiddle.net/g3mgR/1

答案 1 :(得分:3)

这样的事情会起作用:

<input type="text" id="txt" />​

对于jQuery:

$('#txt').keydown(function (e) {
    var key = e.charCode || e.keyCode || 0;
    if (key > 46 && key < 58) {
        event.preventDefault();
        alert('its a number, do something');
    }
});​

以下是Fiddle

答案 2 :(得分:1)

使用keydown代替keyup

答案 3 :(得分:0)

keypress事件与String.fromCharCode结合使用:

document.getElementById('yourTextBoxID').onkeypress = function () {
    var characterPressed = String.fromCharCode(event.keyCode);

    if (characterPressed.test(/[a-z]/i)) {
        // user pressed a letter
    } else {
        // user did not press a letter
    }
};​

http://jsfiddle.net/TSB9r/3/