Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Way to trigger multiple keypress and hold events in jQuery

Looking for a way to simulate a multiple keypress using jQuery. For example ALT+F1 (holding down alt and hitting F1).

I've managed to simulate the F1 keypress thanks to: Definitive way to trigger keypress events with jQuery

Looking for something like this:

$(".f1").click(function() {   
    var e = jQuery.Event("keydown");
    e.keyCode = 18; // ALT key pressed
    // while ALT key is pressed, hit the F1 Key
    $("input").trigger(e, function(){
        var e = jQuery.Event("keydown");
        e.which = 112; // F1 key
        $("input").trigger(e);
        });
});
like image 765
wkm Avatar asked Apr 09 '12 22:04

wkm


2 Answers

With the modifier keys alt, ctrl, and shift, you can use event modifiers specifically for them:

$(".f1").click(function() {
    var e = jQuery.Event("keydown");
    e.which = 112;       // # F1 code value
    e.altKey = true;     // Alt key pressed
    $("input").trigger(e);
});

Demo: http://jsfiddle.net/jtbowden/2kcrg/

like image 149
Jeff B Avatar answered Oct 26 '22 13:10

Jeff B


  1. you can't outright simulate keypress events, you can only trigger javascript handlers bound to them. So consider simply writing a function that encapsulates what you want your keypress to do, having the keypress handler call that function, and "simulate" the keypress in other places by simply calling that same function.
  2. if you really must simulate ALT-F1 and similar, you need to set other properties in the keypress event (e.g. altKey or metaKey), and/or first trigger keydown event for the press of the modifier key (in JQuery/firefox, pressing ALT gives me a keydown event with e.which == 18.). At the end of the day you just need to create the same events that your handlers respond to.
like image 41
Michael Slade Avatar answered Oct 26 '22 14:10

Michael Slade