如何允许数字(0-9)&使用jQuery的十进制值文本框?

时间:2012-10-11 08:31:36

标签: jquery

我写了几行只接受数字字符,但我的脚本无效。当我键入任何字母表然后它被插入到我不想要的文本框中。我希望文本框只接受数值和“。”小数点。这是我的剧本。告诉我那里有什么问题。

 $().ready(function () {
        $("input[id*='txtQty']").keyup(function (event) {
            var flag = false;

            if (event.shiftKey == true) {
                event.preventDefault();
            }
            // Allow Only: keyboard 0-9, numpad 0-9, backspace, tab, left arrow, right arrow, delete
            if ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105) || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 37 || event.keyCode == 39 || event.keyCode == 46) {
                // Allow normal operation
                flag = true;
            } else {
                // Prevent the rest
                event.preventDefault();
            }

            if (flag) {

            }
        });
    });

如果可能请给我脚本,这将使我的文本框只有数字和十进制数字。感谢

这是我的完整脚本。问题是我不想要点“。”

        $().ready(function () {
        $("input[id*='txtQty']").keydown(function (event) {
            var flag = true;

            if (event.shiftKey == true) {
                event.preventDefault();
                flag = false;
            }

            if ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105) || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 37 || event.keyCode == 39 || event.keyCode == 46 || event.keyCode == 190) {

            } else {
                event.preventDefault();
                flag = false;
            }

            if (flag) {
                if (jQuery.trim(this.value) != "") {
                    if (IsNumeric(jQuery.trim(this.value)) == true) {
                        var Symbol = $("span[id*='lblPrice']").text().trim().substring(1, 0);
                        var oldprice = $("input[id*='txtHiddenPrice']").val();
                        var newprice = Math.round((oldprice * this.value), 2);
                        $("span[id*='lblPrice']").text(Symbol + newprice);
                        UpdateCart($(this).closest('tr').find("input[id*='txtItemId']").val(), $(this).closest('tr').find("input[id*='txtProductId']").val(), this.value);
                    }
                }
            }
        });
    });

所以请告诉我在代码中需要更改的内容,因此它不应该取十进制值。 另一个重要的事情是我将keydown()事件与外卡系统相关联,因为我的页面可能有许多名称结尾的文本框,如 txtQty

 $("input[id*='txtQty']").keyup(function (event) {

所以请帮助我。感谢

13 个答案:

答案 0 :(得分:35)

您无法在e.preventDefault()事件中使用keyup。将其更改为keydown

$(function () {
    $("input[id*='txtQty']").keydown(function (event) {


        if (event.shiftKey == true) {
            event.preventDefault();
        }

        if ((event.keyCode >= 48 && event.keyCode <= 57) || 
            (event.keyCode >= 96 && event.keyCode <= 105) || 
            event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 37 ||
            event.keyCode == 39 || event.keyCode == 46 || event.keyCode == 190) {

        } else {
            event.preventDefault();
        }

        if($(this).val().indexOf('.') !== -1 && event.keyCode == 190)
            event.preventDefault(); 
        //if a decimal has been added, disable the "."-button

    });
});​

Fiddle

答案 1 :(得分:16)

您可以在加密时删除非数字字符。

$("#txtQty").keyup(function() {
    var $this = $(this);
    $this.val($this.val().replace(/[^\d.]/g, ''));        
});​

The demo.

答案 2 :(得分:3)

创建仅限数字类并将其添加到元素

这将接受:
- 退格
- 删除
- 数字
- 一位小数

$(".numbers-only").keypress(function (e) {
    if(e.which == 46){
        if($(this).val().indexOf('.') != -1) {
            return false;
        }
    }

    if (e.which != 8 && e.which != 0 && e.which != 46 && (e.which < 48 || e.which > 57)) {
        return false;
    }
});

答案 3 :(得分:1)

此解决方案仅适用于您未包含十进制数或仅包含0-9

的数字的情况
$("#number").keypress(function( event ){
    var key = event.which;

    if( ! ( key >= 48 && key <= 57 ) )
        event.preventDefault();
});

您可以在此处查看正在运行的示例http://jsfiddle.net/yghD3/6/

答案 4 :(得分:1)

我的解决方案接受复制和粘贴并保存插入符号的位置。它用于产品成本,因此仅允许正十进制值。可以很容易地重构,允许使用负数或只是整数位。

$(function () {
    $("input.only-positive-decimal").bind("change keyup input", function () {
            var position = this.selectionStart - 1;
                //remove all but number and .
                var fixed = this.value.replace(/[^0-9\.]/g, '');
                if (fixed.charAt(0) === '.')                  //can't start with .
                    fixed = fixed.slice(1);

                var pos = fixed.indexOf(".") + 1;
                if (pos >= 0)               //avoid more than one .
                    fixed = fixed.substr(0, pos) + fixed.slice(pos).replace('.', '');

                if (this.value !== fixed) {
                    this.value = fixed;
                    this.selectionStart = position;
                    this.selectionEnd = position;
                }
    });
});

点击html页面:

<input type="text" class="only-positive-decimal" />

答案 5 :(得分:1)

防止非数字数字

        $(".number").on('keypress', function (e) {
            return e.metaKey || e.which <= 0 || e.which == 8 || e.which == 46 || /[0-9]/.test(String.fromCharCode(e.which));
            //      cmd/ctrl ||  arrow keys  ||   delete key ||   dot key     || numbers
        });

答案 6 :(得分:0)

您可以尝试http://www.texotela.co.uk/code/jquery/numeric/

This thread提及相同的插件以及您可以尝试的其他一些内容。

答案 7 :(得分:0)

$('.number').keypress(function(event) {
  if ((event.which != 46 || $(this).val().indexOf('.') != -1) && (event.which < 48 || event.which > 57)) {
    event.preventDefault();
  }
});

答案 8 :(得分:0)

//This will let you enter numbers only and the decimal point ones.

$(window).load(function(){
$('.number').keypress(function(event) {
  if(event.which < 46 || event.which >= 58 || event.which == 47) {
    event.preventDefault();
  }

  if(event.which == 46 && $(this).val().indexOf('.') != -1) {
    this.value = '' ;
  }  
});
});

答案 9 :(得分:0)

只允许 1到9个数字 decimal 。如果插入了其他字符,它将替换这些数字。

<script>
  $("input[id*='txtQty']").keydown(function () {
    var txtQty = $(this).val().replace(/[^0-9\.]/g,'');
    $(this).val(txtQty);
  });
</script>

签入fiddle

答案 10 :(得分:0)

试试此代码

&#13;
&#13;
$('#from-amount1').keypress(function(event) {
//alert(event.which == 8);
//alert(event.which);
    if((event.which > 47 && event.which < 58) || (event.which == 46 || event.which == 8))
    {
    	 // your condition
    }
    else
    {
    event.preventDefault();
    }
}).on('paste', function(event) {
    event.preventDefault();
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<input type="text" value="" id="from-amount1"/>
&#13;
&#13;
&#13;

答案 11 :(得分:0)

element.keypress(function (e) { 
    var charCode = (e.which) ? e.which : event.keyCode;
    var dec=0;

    dec = (this.value.match(/[.]/g) || [] ).length;

    if(dec===1 && e.key=='.')
        return false;

    if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode!=46)
        return false;

});

答案 12 :(得分:0)

1允许第一个字符点 2拒绝多个点 3允许同时使用两个点键

在您的HTML中

$('#yourId')。keypress(KeyPressOnlyDecimals);

功能KeyPressOnlyDecimals(事件){

   if (event.which != 13)
        {
                let cId = $(window.getSelection().anchorNode).find('input')[0].id;
                let tId = $(event.currentTarget).attr('id');
                let sel = window.getSelection().toString();

                if (((event.which != 46  ) || ($(this).val().indexOf('.') != -1  && ($(event.currentTarget).val().length > 0 &&  ((cId != tId) || (cId === tId && (sel == null || sel.length == 0)))))) && (event.which < 48 || event.which > 57)) {
                    event.preventDefault();
                }
                $(event.currentTarget).on('paste', function(event) {
                    event.preventDefault();
                });
                var currentVal = $(event.currentTarget).val();

                let log =   $(event.currentTarget).attr('log');
                var count = log.split('.').length;
                if (count == 2 && event.which == 46 && sel != currentVal)
                {
                    event.preventDefault();
                }

                if (count >= 2)
                {

                    if (cId === tId && sel.length > 0)
                    {
                        var replaced = currentVal.replace(new RegExp(sel, 'g'), event.key);

                    }

                    if (count > 2 && $(event.currentTarget).val().length > 0 &&  ((cId != tId) || (cId === tId && (sel == null  || sel.length == 0) ))) 
                    {
                        event.preventDefault();
                    }

                }
                else
                {
                    if(event.which == 46)
                        $(event.currentTarget).attr('log',event.key);
                }

                console.log($(event.currentTarget).attr('log'));

        }

}