• JavaScript 输入小数点(event.key或event.code)


    1. 概述

    1.1 说明

    在开发过程中,有时候需要仅输入数字与小数,故记录下使用过的功能,以便后期使用。

    1.2 key

    定义:按下按键时返回的标识符,按键标识符是表示键盘按钮的字符串(如1,2,a等)。

    使用:event.key去获取按下按键的字符串。

    1.3 keyCode

      定义:按下按键时此按键值所对应的字符代码(如ESC键为27)。

      使用:event.keyCode去获取按下按键的字符码。

      备注:此功能已废弃,但是仍然可以使用。

     2. 示例

     2.1 js代码

        /**
         * 输入为小数
         * @param event 事件
         * @param allowPoint 是否包含小数点
         **/
        function inputNumber (event, allowPoint) {
            let bInputTrue = false;
            if (event.key !== undefined) {
                let arrNumber = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "Backspace", "Delete","Shift"];//数字键盘与删除键
                let arrTopNumber = ["Digit0", "Digit1", "Digit2", "Digit3", "Digit4", "Digit5", "Digit6", "Digit7", "Digit8", "Digit9"];//中文_上边数字键盘
                let arrNumNumber = ["Numpad1", "Numpad2", "Numpad3", "Numpad4", "Numpad5", "Numpad6", "Numpad7", "Numpad8", "Numpad9"];//中文_右边数字键盘
                if (allowPoint) {
                    arrNumber.push(".");
                    arrTopNumber.push("Period");
                    arrTopNumber.push("NumpadDecimal");
                }
                if(event.key=="Process"){
                    for (let i = 0; i < arrTopNumber.length; i++) {
                        if (event.code == arrTopNumber[i]) {
                            bInputTrue = true;
                            break;
                        }
                    }
                    if(bInputTrue ==false ){
                        for (let i = 0; i < arrNumNumber.length; i++) {
                            if (event.code == arrNumNumber[i]) {
                                bInputTrue = true;
                                break;
                            }
                        }
                    }
                } else {
                    for (let i = 0; i < arrNumber.length; i++) {
                        if (event.key == arrNumber[i]) {
                            bInputTrue = true;
                            break;
                        }
                    }
                }
    
            } else if (event.keyCode !== undefined) {
                let charCode = event.keyCode;
                let bCondition1 = charCode >= 48 && charCode <= 57; //数字
                let bCondition2 = charCode >= 96 && charCode <= 105; //小键盘数字
                let bCondition3 = charCode == 46 || charCode == 8; //两个删除键
    
                let decimalPoint = charCode == 110 || charCode == 190;//小数点
                let bCondition = null;
                let bShift = event.shiftKey == 1;
    
                if (allowPoint) {
                    bCondition = bCondition1 || bCondition2 || bCondition3 || decimalPoint;
                } else {
                    bCondition = bCondition1 || bCondition2 || bCondition3;
                }
                if (bCondition && !bShift) {
                    bInputTrue = true;
                } else {
                    bInputTrue = false;
                }
            }
            if (bInputTrue) {
                return true;
            } else {
                document.activeElement.blur();//使失去焦点
                if (event.preventDefault) {
                    event.preventDefault();//中文情况下不起作用
                }
                else {
                    event.returnValue = false;
                }
            }
        }

      注意:代码 document.activeElement.blur(); 会使输入框焦点失去,故此处可考虑是否使用。

     2.1 html代码

    <input onkeydown="inputNumber(event,true)"  onpaste="return false"  ondragenter="return false" oncontextmenu="return false;" style="ime-mode:disabled">
  • 相关阅读:
    JSP
    token防止表单重复提交
    web应用程序性能优化
    js 优化
    文本查看及处理工具简单命令
    DNS之一---DNS服务及BIND服务,并实现DNS正向与反向解析
    企业级自动化运维工具应用实战ansible
    Linux小试牛刀
    Linux特殊权限及ACL权限
    文件的默认权限UMASK
  • 原文地址:https://www.cnblogs.com/ajuan/p/10190153.html
Copyright © 2020-2023  润新知