views:

83

answers:

2

I'm using JavaScript and Prototype and catching the key presses from the user. I successfully catch return, space and arrows with code like this:

Event.observe(window, "keyup", function(e) {
  switch (e.keyCode) {
    case Event.KEY_RETURN:
    case Event.KEY_RIGHT:
    case 32:  // space
      // do something
      break;
  }
});

My problem is that spaces and arrow keep on scrolling the page. Is there a way to keep them from scrolling the page?

+1  A: 

From the Prototype documentation:

Event.stop(event)
Stops the event’s propagation and prevents its default action from being triggered eventually.

So adding Event.stop(e); before the break; should solve your problem.

Also, you should be doing this for the keydown event, because keyup is too late.

brainjam
That didn't work in either Firefor nor Chrome. Maybe I'm missing something?
J. Pablo Fernández
@J.Pablo, I just realized you are only observing the keyup event. Try observing the keydown and keypress events .. and using the Event.stop(e) there. Otherwise, they're probably getting through to the browser.
brainjam
keypress didn't work (it had no effect whatsoever, like if the event doesn't exist), keydown worked as I expected. Thanks.
J. Pablo Fernández
+1  A: 

It's too late in keyup to prevent the default browser action. Do it in the keydown event instead and use Prototype's Event.stop method:

Event.observe(document, "keydown", function(e) {
  switch (e.keyCode) {
    case Event.KEY_RETURN:
    case Event.KEY_RIGHT:
    case 32:  // space
      // do something
      Event.stop(e);
      break;
  }
});
Tim Down