My solution is quite long, but only for usability. It can be reduced
further to this...

Object.extend(Array.prototype,{
  inArray: function(value) {
        for (var i = 0, item; item = this[i]; i++) if (item === value) return
true;
        return false;
  }
});

Object.extend(Event,{
  isKey: function(event, key, modifiers) {
    var KeyCode = function(event) {
      return Try.these(
        function() { return event.keyCode },
        function() { return event.which },
        function() { return event.charCode }
      ) || false
    }
    var withModifiers = function(event, keys) {
      if (!keys) return true
      var modifiers = ['shift','ctrl','alt'], check = []
      modifiers.each(function(key, index){
        if (keys.inArray(key)) check[check.length] = event[key+'Key']
      })
      return check.all()
    }
    if ( (KeyCode(event) == key) && (!modifiers ? true :
withModifiers(event, modifiers)) ) return true
    return false
  }
});

Some example usage....

document.observe('keydown',function(event){
  if (Event.isKey(event,65)) {
    console.log('a was pressed')
  }
  if (Event.isKey(event,65,['shift'])) {
    console.log('a was pressed with shift (A)')
  }
  if (Event.isKey(event,65,['shift','ctrl'])) {
    console.log('a was pressed with shift && ctrl (A)')
  }
})


As you can see... The first argument is the event, second is the
keyCode to check, third is optional
modifiers (shift, ctrl, alt).
Hope this helps.

On Mar 7, 7:32 pm, kangax <[EMAIL PROTECTED]> wrote:
> Observing "keydown" and checking event's "ctrlKey" seems to be
> somewhat consistent.
> There's a great article describing what the state of key detection is
> these dayshttp://unixpapa.com/js/key.html
>
> Best,
> kangax
>
> On Mar 7, 12:18 pm, louis w <[EMAIL PROTECTED]> wrote:
>
> > Thanks TJ.
>
> > Does anyone have thoughts on this? The solution proposed by tancurrom
> > seems kind of long. I would think that proto would have the cross-
> > browser keydown stuff already built in.
>
> > On Mar 7, 7:07 am, "T.J. Crowder" <[EMAIL PROTECTED]> wrote:
>
> > > For other readers: Several replies in louis' cross-posted 
> > > threadhttp://groups.google.com/group/prototype-core/browse_thread/thread/50...
>
> > > As kangax indicated, best to continue the discussion (if needed) here
> > > in spinoffs, not there in core.
>
> > > On Mar 6, 4:44 pm, louis w <[EMAIL PROTECTED]> wrote:
>
> > > > I am trying to detect if the control key has been pressed to change
> > > > and action. I am using the latest proto build.
>
> > > > Here is my code:
>
> > > >         <script type="text/javascript">
> > > >                 document.observe('keydown', function(k) {
> > > >                         if (k.keyCode != 17) return;
> > > >                         alert('ctrl');
> > > >                 });
> > > >         </script>
>
> > > > For the control key, it will only trigger the alert every other time
> > > > the key is pressed. For other keys it works every time thou.
>
> > > > Can you offer any advice.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Spinoffs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-spinoffs?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to