我有一个始终有焦点的输入框。进入这个输入框的命令总是字母。如果用户按下一个数字,我不希望它被添加到文本框中,而是使用它来运行不同的命令(就像热键一样)。
我看到实现的方法是查看 keyup 事件并删除不需要的字符。相反,有什么方法可以拦截键盘输入并检查插入之前的值是什么?
我考虑过使用 div 创建自定义输入字段并拦截所有键盘命令。有没有办法让一个闪烁的插入符号看起来像一个输入框?
我有一个始终有焦点的输入框。进入这个输入框的命令总是字母。如果用户按下一个数字,我不希望它被添加到文本框中,而是使用它来运行不同的命令(就像热键一样)。
我看到实现的方法是查看 keyup 事件并删除不需要的字符。相反,有什么方法可以拦截键盘输入并检查插入之前的值是什么?
我考虑过使用 div 创建自定义输入字段并拦截所有键盘命令。有没有办法让一个闪烁的插入符号看起来像一个输入框?
听起来你想要一个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
像这样的东西会起作用:
<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');
}
});
这是小提琴
使用keydown
而不是keyup
.
结合使用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
}
};