-1

I'd like to restrict keys that can be pressed.

$('.txtComments').keydown(function (event) {
  var keys = new Array();
  keys[0] = "8";
  keys[1] = "46";
  keys[2] = "37"
  keys[3] = "39"

  if(!(....)) //Check whether the keyCode is either of 8, 46, 37, or 39. 
  {
     event.preventDefault();  
  }
});

Thanks for helping

Frank
  • 16,476
  • 7
  • 38
  • 51
Richard77
  • 20,343
  • 46
  • 150
  • 252

5 Answers5

3

The simplest (and fastest) here would be to use an object as map :

   var keys = {};
   keys[8] = true;
   ...

   if (!keys[event.which]) {
     ...

Note that I suggest to use event.which instead of the keycode for better compatibility.

Denys Séguret
  • 372,613
  • 87
  • 782
  • 758
2

There are so many ways to implement this:

Just hard code it:

var keyCode = event.which;

if (keyCode != 8 && keyCode != 46 ...)

or check an array:

var keys = [8, 46, ...];
if (keys.indexOf(keyCode) < 0)

or the jQuery equivalent:

if ($.inArray(keyCode, keys) < 0)

or check an object:

var keys = { 8: 1, 46: 1, ... }
if (! (keyCode in keys) )  // or if (!keys[keyCode])

or a switch:

switch (keyCode) {
    case 8: case 46: ...
        // do nothing
        break;
    default:
        event.preventDefault();
}
Alnitak
  • 334,560
  • 70
  • 407
  • 495
1

jQuery provides the utility method jQuery.inArray() to check if an array contains a value.

Ruben Infante
  • 3,125
  • 1
  • 17
  • 16
0

if(!keys.in_array(event.keyCode));

And change your keydown to keypress

<script type="text/javascript">
// Benoit Asselin - http://www.ab-d.fr
Array.prototype.in_array = function(p_val) {
    for(var i = 0, l = this.length; i < l; i++) {
        if(this[i] == p_val) {
            return true;
        }
    }
    return false;
}
</script>
MIIB
  • 1,849
  • 10
  • 21
0

You can use:-

   var keys = [];
    keys[8] = keys[4] = keys[37] = keys[39] = true;

if(keys[keyval]){

}
QuentinUK
  • 2,997
  • 21
  • 20