检查值的长度以及是否为数字

时间:2011-12-21 13:13:03

标签: jquery

我使用以下代码检查文本框中的值是否为数字:

(function ($) {
    $.fn.numeric = function (options) {
        return this.each(function () {
            var $this = $(this);

            $this.keypress(options, function (e) {
                // allow backspace and delete
                if (e.which == 8 || e.which == 0)
                    return true;

                //if the letter is not digit
                if (e.which < 48 || e.which > 57)
                    return false;

                // check max range
                var dest = e.which - 48;
                var result = this.value + dest.toString();
                if (result > e.data.max) {
                    return false;
                }
            });
        });
    };
})(jQuery);

在输入文本框元素上使用时,我将其声明如下

$(input).numeric({ max: 999});

问题是它正在处理输入和检查 value应该是整数而不是字符串。

但我需要更改它将验证双倍的代码。

所以如果我插入0.22就可以,但是如果我要插入.22 它不会填充数字。

请帮忙

5 个答案:

答案 0 :(得分:1)

检查此答案和评论(尤其是已接受的评论): Validate decimal numbers in JavaScript - IsNumeric()

否则,是否真的有必要检查每个按键上的值?

答案 1 :(得分:1)

此代码应该按预期工作:

(function($) {
    $.fn.numeric = function(options) {
        return this.each(function() {
            var $this = $(this);

            $this.keypress(options, function(e) {
                // allow backspace and delete
                if (e.which == 8 || e.which == 0) {
                    return true;
                }

                // allow float
                if (e.which == 46 && this.value.length >=1 && this.value.indexOf('.') == -1) {
                    return true;
                }

                //if the letter is not digit
                if (e.which < 48 || e.which > 57) return false;

                // check max range
                var dest = e.which - 48;
                var result = this.value + dest.toString();
                if (result > e.data.max) {
                    return false;
                }
            });
        });
    };
})(jQuery);

演示:http://jsfiddle.net/GuillaumeCisco/nGNxG/

答案 2 :(得分:0)

我尝试调试代码。您只需要更新'。'即可。 ASCII值为'。' (点)是46.如果您进行以下更改,它将起作用!

  1. 使用(e.which == 8 || e.which == 0)
  2. 更新(e.which == 8 || e.which == 0||e.which==46)
  3. 您需要使用引号包装输入 - $('input').numeric({ max: 999});
  4. 使用代码alert(parseInt($('input').val()));
  5. 警告值进行测试

    我看到上面的变化解决了这个问题:)请告诉我,如果它不起作用:)

答案 3 :(得分:0)

在每个keypress事件上进行验证可能很麻烦,只是从按键返回false不会让用户知道为什么不允许他们输入该密钥。您可能在标签中标记为数字的字段或类似的字段,但您可以提供给用户的任何额外帮助,即使用户只是您自己,也可以节省很多烦恼。这样的事情怎么样?

(function($) {
    $.fn.numeric = function(options) {
        return this.each(function () {
            var $this = $(this);

            $this.blur(function(e) {
                if (isNaN(+this.value)) {
                    $('<span class="error">Must be numeric</span>').insertAfter($this);
                } else {
                    $this.next('span.error').remove();
                }
            });
        });
    };
}(jQuery));

working example here

此外,您还需要从选项中添加最小/最大支票。为了这个例子,我删除了它。

最后,如果您要进行大量验证,可能需要使用jQuery Validation之类的验证库,而不是自己动手。

答案 4 :(得分:0)

我按照@Guillaume建议的解决方案。但我添加了附加条件

 if (this.value.length > e.data.maxLength)
            return false;

所以下面的所有代码

(function ($) {

    $.fn.numeric = function (options) {

        return this.each(function () {
            var $this = $(this);

            $this.keypress(options, function (e) {

                // allow backspace and delete
                if (e.which == 8 || e.which == 0)
                    return true;

                if (e.which == 46 && this.value.length >= 1 && this.value.indexOf('.') == -1) {
                    return true;
                }
                //if the letter is not digit
                if (e.which < 48 || e.which > 57)
                    return false;

                // check max range
                var dest = e.which - 48;
                var result = this.value + dest.toString();
                if (result > e.data.max) {
                    return false;
                }

                if (this.value.length > e.data.maxLength)
                    return false;
            });
        });
    };
})(jQuery);

并使用它

 $(input).numeric({ max: 999,maxLength:4});

maxLength - 属性表示最大输入长度