Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript键码与字符码_Javascript_Keycode - Fatal编程技术网

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码,您只需使用
    e.which | e.keyCode
    ,您不必担心按下键,因为对于键入的文本,keypress在所有浏览器中都会自动重复(根据优秀人才)

    因此,您真正需要的是:

    <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
    事件,
    keyCode
    在所有主要浏览器中都存在。请参考我以前的答案[[1]:有趣。我如何捕获和允许所需的按键?建议使用onKeyUp,因为它最接近onKeyPress-不,不是。
    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>