我有一个始终具有焦点的输入框。进入该输入框的命令始终是字母。如果用户按下一个数字,我希望它不被添加到文本框中,而是使用它来运行另一个命令(就像热键一样)。我所看到的实现方法是通过查看keyup事件并删除不需要的字符。相反,是否有任何方法可以拦截键盘输入并在插入之前检查值是什么?我考虑过用div创建一个自定义输入字段,并拦截所有键盘命令。有没有办法让一个闪烁的插入符号看起来像一个输入框?
keyup
a2mppw5e1#
听起来您需要一个contenteditable div:
contenteditable
<div id="editor" contenteditable="true"></div>
您可以侦听keydown事件,并在它们不是字母时阻止它们:
keydown
$("#editor").keydown(function (e) { if (e.which > 90 || (e.which > 48 && e.which < 65)) { e.preventDefault(); } });
要将这些数字作为“热键”处理,只需确定e.which是哪个键,然后相应地操作。
e.which
示例:http://jsfiddle.net/g3mgR/1
u4dcyp6a2#
类似这样的事情会起作用:
<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
xzabzqsa3#
使用keydown而不是keyup。
jmo0nnb34#
将keypress事件与String.fromCharCode结合使用:
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/
4条答案
按热度按时间a2mppw5e1#
听起来您需要一个
contenteditable
div:您可以侦听
keydown
事件,并在它们不是字母时阻止它们:要将这些数字作为“热键”处理,只需确定
e.which
是哪个键,然后相应地操作。示例:http://jsfiddle.net/g3mgR/1
u4dcyp6a2#
类似这样的事情会起作用:
对于jQuery:
这里是Fiddle
xzabzqsa3#
使用
keydown
而不是keyup
。jmo0nnb34#
将
keypress
事件与String.fromCharCode
结合使用:http://jsfiddle.net/TSB9r/3/