JavaScript键码与字符码
问题是:JavaScript键码与字符码,javascript,keycode,Javascript,Keycode,问题是: 将HTML输入中允许的字符限制为a-z a-z 对于业务需求,这需要在按键上完成,这样字符甚至不允许出现在输入中 Tab、enter、箭头、退格、shift都是允许的。用户必须能够自由进出文本框,删除字符等 这是我的代码的起点 var keyCode = (e.keyCode ? e.keyCode : e.which); 然而,我在keyCode中得到的每一个值都与我在网上看到的任何字符表不对应。例如,字符“h”给我的返回码是104 KeyCode和CharCode不同吗?哪个
- 将HTML输入中允许的字符限制为a-z a-z
- 对于业务需求,这需要在按键上完成,这样字符甚至不允许出现在输入中
- Tab、enter、箭头、退格、shift都是允许的。用户必须能够自由进出文本框,删除字符等
var keyCode = (e.keyCode ? e.keyCode : e.which);
然而,我在keyCode中得到的每一个值都与我在网上看到的任何字符表不对应。例如,字符“h”给我的返回码是104
KeyCode和CharCode不同吗?哪个代码包含控制字符?我需要转换吗
如何将输入限制为a-z a-z并允许在JavaScript中使用所需的键?我认为keyCode返回ASCII键值,ASCII-104是h Charcode在另一个答案中指出,这是一些浏览器中使用的替代方法
下面是一篇带有crssbrowser示例的文章:onKeyPress对大写字母和小写字母有不同的代码。你可能会发现,打开封顶锁,然后输入你的信件,会得到你所期望的密码
onKeyUp和onKeyDown对于大写字母和小写字母具有相同的字符代码。建议使用onKeyUp,因为它最接近onKeyPress所有问题的答案都可以在上找到 …但总而言之:
- 唯一可以可靠获取字符信息(与键代码信息相反)的事件是
事件keypress
- 在
事件中,除IE以外的所有浏览器/* 对于非打印键,您不会在keypress上获得keyCode, 为什么不在按键下捕捉它们呢? */按键
函数密码(e){ e=e | | window.event; var xtrakeys={ k8:'退格',k9:'制表',k13:'输入',k16:'移位',k20:'大写锁定', k35:'结束',k36:'家',k37:'Ar左',k38:'Ar向上',k39:'Ar右', k40:“Ar向下”,k45:“插入”,k46:“删除” }, kc=e.keyCode;
如果((kc>64&&kc 64&&kc我认为您采取了完全错误的方法。类似于:<input id="test"> <script type="text/javascript"> var aToZ = function(el){ if(this.value.match(/[^a-zA-Z]/)){ this.value = this.value.replace(/[^a-zA-Z]+/, '') } } document.getElementById("test").onkeyup = aToZ </script>
var aToZ=函数(el){ if(此.value.match(/[^a-zA-Z]/){ this.value=this.value.replace(/[^a-zA-Z]+/,“”) } } document.getElementById(“test”).onkeyup=aToZ
另外,也不要忘记重复检查服务器端。实际上,104是小写字母“h”的ASCII码。要在keypress上获得键入字符的ASCII码,您只需使用
,您不必担心按下键,因为对于键入的文本,keypress在所有浏览器中都会自动重复(根据优秀人才) 因此,您真正需要的是:e.which | e.keyCode
<input id="textbox"> <script type="text/javascript"> document.getElementById('textbox').onkeypress = function(e){ var c = e.which || e.keyCode; if((c > 31 && c < 65) || (c > 90 && c < 97) || (c > 122 && c !== 127)) return false; }; </script>
试试看:document.getElementById('textbox')。onkeypress=函数(e){ var c=e.which | e.keyCode; 如果((c>31&&c<65)|(c>90&&c<97)|(c>122&&c!==127)) 返回false; };
(ASCII代码来自)Good Great.KeyboardEvent。[key,char,keyCode,charCode,根据Mozilla的API文档,它们都已被弃用,或者目前存在突出的bug-。即使是JQuery也会在这一点上推卸责任,让用户自己解决。以下是标记示例:<form id="formID"> <input type="text" id="filteredInput"> <input type="text" id="anotherInput"> </form>
以下逻辑可用于捕获键盘输入(在本例中,通过jQuery文档就绪包装) 它可能读起来有点愚蠢,但基本上,我检查了所有我想允许的内容(在你的例子中,字母a到Z不区分大小写),什么也不做。换句话说,默认操作是允许的,但是除了alpha之外的任何输入都被阻止 标准键盘导航,如箭头键、主页、结束、制表符、退格、删除等都已选中并允许 注意:这段代码最初是为了满足用户输入,只允许字母数字值(A-Z,A-Z,0-9),我将这些行作为注释保留不变<script> jQuery( document ).ready( function() { // keydown is used to filter input jQuery( "#formID input" ).keydown( function( e ) { var _key = e.which , _keyCode = e.keyCode , _shifted = e.shiftKey , _altKey = e.altKey , _controlKey = e.ctrlKey ; //console.log( _key + ' ' + _keyCode + ' ' + _shifted + ' ' + _altKey + ' ' + _controlKey ); if( this.id === jQuery( '#filteredInput' ).prop( 'id' ) ) { if( // BACK, TAB ( _key === 8 || _key === 9 ) // normal keyboard nav ){} else if( // END, HOME, LEFT, UP, RIGHT, DOWN ( _key === 35 || _key === 36 || _key === 37 || _key === 38 || _key === 39 || _key === 40 ) // normal keyboard nav ){} else if( // DELETE ( _key === 46 ) // normal keyboard nav ){} else if( ( _key >= 65 && _key <= 90 ) // a- z //( _key >= 48 && _key <= 57 && _shifted !== true ) || // 0 - 9 (unshifted) //( _key >= 65 && _key <= 90 ) || // a- z //( _key >= 96 && _key <= 105 ) // number pad 0- 9 ){} else { e.preventDefault(); } } }); }); </script>
jQuery(文档).ready(函数(){ //keydown用于过滤输入 jQuery(“formID输入”).keydown(函数(e){ var_key=e ,_keyCode=e.keyCode ,_shift=e.shiftKey ,_altKey=e.altKey ,_controlKey=e.ctrlKey ; //控制台日志(_键+''+_键代码+''+_移位+''+_altKey+''+_控制键); if(this.id==jQuery('#filteredInput').prop('id')){ 如果( //后面,TAB (|键===8 | |键===9)//正常键盘导航 ){} 否则如果( //结束,主,左,上,右,下 (U键==35 | | | | U键==36 | | | U键==37 | | | U键==38 | | | | U键==40)//正常键盘导航 ){} 否则如果( //删除 (_key==46)//正常键盘导航 ){} 否则如果(
(\u-key>=65&&&u-key=48&&u-key=65&&u-key=96&&u-key
并非在所有浏览器中都存在。小心这一点。@难以捉摸:对于keyCode
事件,您是正确的。对于keypress
事件,keydown
在所有主要浏览器中都存在。请参考我以前的答案[[1]:有趣。我如何捕获和允许所需的按键?建议使用onKeyUp,因为它最接近onKeyPress-不,不是。keyCode
更接近onkeydown
,因为它们都是在按键时触发的onKeyPress
<form id="formID"> <input type="text" id="filteredInput"> <input type="text" id="anotherInput"> </form>
<script> jQuery( document ).ready( function() { // keydown is used to filter input jQuery( "#formID input" ).keydown( function( e ) { var _key = e.which , _keyCode = e.keyCode , _shifted = e.shiftKey , _altKey = e.altKey , _controlKey = e.ctrlKey ; //console.log( _key + ' ' + _keyCode + ' ' + _shifted + ' ' + _altKey + ' ' + _controlKey ); if( this.id === jQuery( '#filteredInput' ).prop( 'id' ) ) { if( // BACK, TAB ( _key === 8 || _key === 9 ) // normal keyboard nav ){} else if( // END, HOME, LEFT, UP, RIGHT, DOWN ( _key === 35 || _key === 36 || _key === 37 || _key === 38 || _key === 39 || _key === 40 ) // normal keyboard nav ){} else if( // DELETE ( _key === 46 ) // normal keyboard nav ){} else if( ( _key >= 65 && _key <= 90 ) // a- z //( _key >= 48 && _key <= 57 && _shifted !== true ) || // 0 - 9 (unshifted) //( _key >= 65 && _key <= 90 ) || // a- z //( _key >= 96 && _key <= 105 ) // number pad 0- 9 ){} else { e.preventDefault(); } } }); }); </script>