开发者

using jQuery/javascript to restrict price field input

开发者 https://www.devze.com 2023-02-16 18:54 出处:网络
I found the following jQuery code on the internet, but I soon found that it had a deficiency in that it dit not accept a decimal point (ascii code 46) - even though the code appears to allow it.

I found the following jQuery code on the internet, but I soon found that it had a deficiency in that it dit not accept a decimal point (ascii code 46) - even though the code appears to allow it.

Currently, I cannot enter prices like 1.23, since the the period is ignored and I get 123 instead.

Can anyone spot whty this is not working?

// Numeric only control handler
$.fn.ForceNumericOnly =
function()
{
    return this.each(function()
    {
        $(this).keydown(function(e)
        {
            var key = e.charCode || e.keyCode || 0;

            // allow backspace, tab, delete, arrows, numbers and keypad numbers ONLY
            return (
                key == 8 ||
                key == 9 ||
                key == 46 ||
                (key >= 37 开发者_运维百科&& key <= 40) ||
                (key >= 48 && key <= 57) ||
                (key >= 96 && key <= 105));
        })
    })
};

I am using the plugin like this:

$(function(){
  $('#price_field').ForceNumericOnly();
});


The other users have pretty much answered your question already, but I wanted to provide you with this link.

http://unixpapa.com/js/key.html

I found it quite useful when dealing with keyboard events and making them cross-browser compatible.

I hope this helps.


Just add the . (code 190 and 110) to the checks:

// Numeric only control handler
$.fn.ForceNumericOnly =
function()
{
    return this.each(function()
    {
        $(this).keydown(function(e)
        {
            var key = e.charCode || e.keyCode || 0;

            // allow backspace, tab, delete, arrows, numbers and keypad numbers ONLY
            return (
                key == 8 ||
                key == 9 ||
                key == 46 ||
                key == 190 ||   // normal .
                key == 110 ||   // keypad .
                (key >= 37 && key <= 40) ||
                (key >= 48 && key <= 57) ||
                (key >= 96 && key <= 105));
        })
    })
};


You should add the key code 190 to accept "."

// Numeric only control handler
$.fn.ForceNumericOnly = function() {
return this.each(function()
{
    $(this).keydown(function(e)
    {
        var key = e.charCode || e.keyCode || 0;

        // allow dot, backspace, tab, delete, arrows, numbers and keypad numbers ONLY
        return (
            key == 190 ||  
            key == 8 ||
            key == 9 ||
            key == 46 ||
            (key >= 37 && key <= 40) ||
            (key >= 48 && key <= 57) ||
            (key >= 96 && key <= 105));
    })
})
};


You need to include 190 and 110 for both decimal points.


// Numeric only control handler
$.fn.ForceNumericOnly =
function()
{
    return this.each(function()
    {
        $(this).keydown(function(e)
        {
            var key = e.charCode || e.keyCode || 0;

            // allow backspace, tab, delete, arrows, numbers and keypad numbers ONLY
            return (
                key == 190 ||    //add this line. 190 is the keycode for a period
                key == 110 ||    //and this line. 110 is the keycode for a decimal
                key == 8 ||
                key == 9 ||
                key == 46 ||
                (key >= 37 && key <= 40) ||
                (key >= 48 && key <= 57) ||
                (key >= 96 && key <= 105));
        })
    })
};
0

精彩评论

暂无评论...
验证码 换一张
取 消