jquery仅支持输入正数负数的数字文本框特效代码

所属分类: 网页特效-表单验证    2023-11-15 10:56:33

jquery仅支持输入正数负数的数字文本框特效代码 ie兼容6
 查看演示  登录后下载 温馨提示
登录会员即可享受免费下载
 我要建站

jquery仅支持输入正数负数的数字文本框特效代码(共3个文件)

    • jquery.numeric-min.js
    • index.html
    • jquery.numeric.js

使用方法

import $ from 'jquery';

const DECIMAL_SEPARATOR = (1.1).toLocaleString().match(/\d(.*?)\d/)[1];

const DECIMAL_SEPARATOR_REGEX = new RegExp('\\' + regexEscape(DECIMAL_SEPARATOR), 'g');

function regexEscape(str) {
    return str.replace(/[\-\[\]\/{}()*+?.\\^$|]/g, '\\$&');
}

const isSupported = (() => {
    let mem = null;
    return () => {
        if (mem === null) {
            const input = document.createElement('input');
            input.type = 'number';
            input.value = '1';
            mem = input.valueAsNumber === 1;
        }
        return mem;
    };
})();

function cleanupInput(input, decimal, negative) {
    const value = input.value;
    let strippedValue = '',
        hasDecimal = false,
        selectionStart, selectionEnd;

    if (input.type !== 'number') {
        selectionStart = input.selectionStart;
        selectionEnd = input.selectionEnd;
    }

    /*const rgx = new RegExp((negative ? '[-+]?' : '[+]?') + '(?:[0-9]+(?:' +
        (decimal ? regexEscape(decimal) : '') + '[0-9]*)?|' +
        (decimal ? regexEscape(decimal) : '') + '[0-9]*)', '');*/

    let i = 0, c;
    for (; i < value.length; i++) {
        c = value.charAt(i);
        if ((c >= '0' && c <= '9') || (negative && c === '-' && !strippedValue.length)) {
            strippedValue += c;
        } else if (decimal && value.substr(i, decimal.length) === decimal && !hasDecimal) {
            hasDecimal = true;
            strippedValue += decimal;
            i += decimal.length - 1;
        } else {
            if (i <= selectionStart) {
                selectionStart--
            }
            if (i <= selectionEnd) {
                selectionEnd--
            }
        }
    }

    if (value !== strippedValue) {
        input.value = strippedValue;
        if (input.type !== 'number') {
            input.selectionStart = selectionStart;
            input.selectionEnd = selectionEnd;
        }
        return true;
    }

    return false;
}

/** @expose */
$.fn.numeric = function (config) {
    this.each(function (index, item) {
        const isInput = item.tagName === 'INPUT';
        let attr;
        //if (isInput && item.type === 'number' && 'valueAsNumber' in item) return;

        if (typeof config === 'boolean') {
            config = {/** @expose */ decimal: config};
        }
        config = config || {};

        if (typeof config.negative === 'undefined') {
            // If the min attribute does not allow negatives, then disable the negative feature
            /** @expose */ config.negative = isInput ? (item.getAttribute('min') ? parseFloat(item.getAttribute('min')) < 0 : true) : true;
        }

        let decimal = (config.decimal === false)
            ? ''
            : ((typeof config.decimal === 'string' && config.decimal) ? config.decimal : DECIMAL_SEPARATOR);
        const negative = !!config.negative;

        // If we're going to use the real 'valueAsNumber', force using the native decimal separator
        if (decimal && this.tagName === 'INPUT' && this.type === 'number' && 'valueAsNumber' in this && isSupported()) {
            decimal = DECIMAL_SEPARATOR;
        }

        // If the step attribute does not allow decimals
        if (typeof config.decimal === 'undefined' && isInput) {
            attr = item.getAttribute('step');
            if (attr && attr !== 'any' && attr.indexOf('.') === -1) {
                decimal = '';
            }
        }

        return $(item)
            .data('numeric.decimal', decimal)
            .data('numeric.negative', negative)
            .on('keypress.numericValue', $.fn.numeric._event)
            .on('keyup.numericValue', $.fn.numeric._event)
            .on('blur.numericValue', $.fn.numeric._event)
            .on('input.numericValue', $.fn.numeric._event);
    });
    return this;
};

/** @expose */
$.fn.valueAsNumber = function () {
    if (!this.length) return null;
    const args = arguments;
    if (args.length) {
        return this.each(function () {
            if (this.tagName === 'INPUT' && this.type === 'number' && 'valueAsNumber' in this && isSupported()) {
                let val = args[0];
                if (val === undefined)
                    this.value = ''; // Compatibility with IE11
                else this.valueAsNumber = val;
            } else {
                this.value = (args[0] === null || args[0] === undefined)
                    ? ''
                    : args[0].toString().replace(/\./, $.data(this, 'numeric.decimal') || DECIMAL_SEPARATOR);
            }
        });
    } else {
        if (this[0].tagName === 'INPUT' && this[0].type === 'number' && 'valueAsNumber' in this[0] && isSupported()) {
            return this[0].valueAsNumber;
        } else {
            let decimal = this.data('numeric.decimal');
            if (decimal) {
                decimal = new RegExp(regexEscape(decimal), 'g');
            } else {
                decimal = DECIMAL_SEPARATOR_REGEX;
            }
            return this[0].value === '' ? null : parseFloat(this[0].value.replace(decimal, '.'));
        }
    }
};

$.fn.numeric._event = function (e) {
    const decimal = $.data(this, 'numeric.decimal'),
        negative = $.data(this, 'numeric.negative');

    cleanupInput(this, decimal, negative);
};

/** @expose */
$.fn.removeNumeric = function () {
    return this
        .removeData('numeric.decimal')
        .removeData('numeric.negative')
        .off('.numericValue');
};

站长提示:
1. 苦力吧素材官方QQ群:950875342
2. 平台上所有素材资源,需注册登录会员方能正常下载。
3. 会员用户积极反馈网站、素材资源BUG或错误问题,每次奖励2K币
4. PHP源码类素材,如需协助安装调试,或你有二次开发需求,可联系苦力吧客服。
5. 付费素材资源,需充值后方能下载,如有任何疑问可直接联系苦力吧客服
相关资源 / 表单验证

jquery表单输入框最少输入指定字符才能提交特效代码

一款textarea多行文本框中输入30个字符才能点击提交插件,当输入字符少于30个字符时,提交按钮为不可点击,等于大于30字符后自动解除屏蔽。
  表单验证
 8277  0

jquery简单易用的会员注册表单验证插件

一款在线表单提交验证插件,提供了三种表单类型验证:用户名、密码、邮箱,可自定义非常方便扩展。
  表单验证
 213  0

jquery表单密码强度/复杂度检测器插件

一个简单的在线密码强度检查器,用于计算密码的强度,并使用百分比显示当前密码安全性。
  表单验证
 5242  0

一款支持自定义的多类型表单验证特效代码

支持多种表单类型的验证插件,包含:input文本框、textarea多行文本框、select下拉框、checkbox多选单选等,表单字段边框高亮及文字提示。
  表单验证
 4262  0

评论数(0) 回复有机会获得K币 用户协议

^_^ 还没有人评论,快来抢个沙发!
😀
  • 😀
  • 😊
  • 😂
  • 😍
  • 😑
  • 😷
  • 😵
  • 😛
  • 😣
  • 😱
  • 😋
  • 😎
  • 😵
  • 😕
  • 😶
  • 😚
  • 😜
  • 😭
发表评论