7

I have written a JS function that only allow numbers to be entered. A copy of that function is below:

function NumbersOnly(e) {
    var evt = e || window.event;
    if (evt) {
        var keyCode = evt.charCode || evt.keyCode;
        //Allow tab, backspace and numbers to be pressed, otherwise return false for everything.
        //(keyCode>=96 && keyCode<=105) are the numpad numbers        
        if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105) || keyCode === 9 || keyCode === 8) {


        }
        else {

            evt.returnValue = false;
        }
    }
}

This function works fine with all the numbers but my problem happens when the shift key is held down and one of the number keys is pressed. The value returned is one of the characters above the numbers. So for example if I hold down shift and press 7, '&' is returned but the keyCode is still 55!! I would have expected that to be different.

So my question is how do I check if the shift key is being held down. I've tried the following check but this didn't work:

    if (keyCode === 16) {
        evt.returnValue = false;
    }
    else {

        if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105) || keyCode === 9 || keyCode === 8) {


        }
        else {

            evt.returnValue = false;
        }
    }

I'm using ASP.NET 4.0.

Any help would be gratefully received.

Thanks in advance.

user123444555621
  • 148,182
  • 27
  • 114
  • 126
Sun
  • 4,458
  • 14
  • 66
  • 108

3 Answers3

16

You can check if shift key is pressed using :

if(evt.shiftKey) {
 ...  //returns true if shift key is pressed
Sudhir Bastakoti
  • 99,167
  • 15
  • 158
  • 162
  • @Sajad, you're missing the point. 'evt' is just a variable, 'evt' is used in my answer in the context of the question posted above.. see the variable 'evt' in the question, line :: var evt = e || window.event; I hope you get it now. – Sudhir Bastakoti Aug 05 '15 at 07:15
  • aha, I got it, I did not read the question. sorry - Also that is *weird*, I used of `event`, and worked correctly. – Shafizadeh Aug 05 '15 at 07:58
  • Because `event` is a global variable corresponding to most recent event. – Alexander Tsepkov Jan 20 '17 at 04:30
0

Use event.key instead of charCode. No more magic numbers!

function onEvent(event) {
    const key = event.key; // "a", "1", "Shift", etc.
    if (isFinite(key)) { // Is number
        // Do work
    }
};

Mozilla Docs

Supported Browsers

Gibolt
  • 42,564
  • 15
  • 187
  • 127
0

use keypress for holding any key isntead of keydown