views:

56

answers:

4

I have an anchor tag that calls a JavaScript function.

With or without JQuery how do I determine if the shift key is down while the link is clicked?

The following code does NOT work because keypress is only fired if a "real key" (not the shift key) is pressed. (I was hoping it would fire if just the shift key alone was pressed.)

var shifted = false;

$(function() {                           
    $(document).keypress(function(e) {
        shifted = e.shiftKey;
        alert('shiftkey='+e.shiftkey);
    });

    $(document).keyup(function(e) {
        shifted = false;
    });
}

...

function myfunction() {
  //shift is always false b/c keypress not fired above
}
+2  A: 

For mouse events, I know that in Firefox at least the "shiftKey" property on the event object will tell you if the shift key is down. It's documented at MSDN but I haven't tried it in forever so I don't recall if IE does this right.

Thus you should be able to check for "shiftKey" on the event object in your "click" handler.

Pointy
Indeed. This has been the case going back to the earliest days of JavaScript.
bobince
+1  A: 

The keypress event isn't triggered by all browsers when you click shift or ctrl, but fortunately the keydown event is.

If you switch out the keypress with keydown you might have better luck.

Chris Pebble
Well but the problem is he won't know for *sure* whether the shift key is pressed. Oh but I guess if the flag is set for "keyUp" too, then it'd be possible to detect when "click" is bracketed by the key events.
Pointy
A: 
    $(document).bind('keyup keydown', function(e){shifted = e.shiftKey} );
hluk
A: 

There is a key code equivalent for each key stroke in javascript. You can used that and detect if the user have pressed Shift key or not. The list is as under ::

backspace   8
tab     9
enter   13
shift   16
ctrl    17
alt     18
pause/break     19
caps lock   20
escape  27
page up     33
page down   34
end     35
home    36
left arrow  37
up arrow    38
right arrow     39
down arrow  40
insert  45
delete  46
0   48
1   49
2   50
3   51
4   52
5   53
6   54
7   55
8   56
9   57
a   65
b   66
c   67
d   68
e   69
f   70
g   71
h   72
i   73
j   74
k   75
l   76
m   77
n   78
o   79
p   80
q   81
r   82
s   83
t   84
u   85
v   86
w   87
x   88
y   89
z   90
left window key     91
right window key    92
select key  93
numpad 0    96
numpad 1    97
numpad 2    98
numpad 3    99
numpad 4    100
numpad 5    101
numpad 6    102
numpad 7    103
numpad 8    104
numpad 9    105
multiply    106
add     107
subtract    109
decimal point   110
divide  111
f1  112
f2  113
f3  114
f4  115
f5  116
f6  117
f7  118
f8  119
f9  120
f10     121
f11     122
f12     123
num lock    144
scroll lock     145
semi-colon  186
equal sign  187
comma   188
dash    189
period  190
forward slash   191
grave accent    192
open bracket    219
back slash  220
close braket    221
single quote    222

Thats true not all browser to keypress event well so used either keyup or key down so check it like this

$(document).keydown(function (e) {
    if (e.keyCode == 16) {
        alert(e.which + " or Shift was pressed");
    }
});

i Hope this helps,

Regards, J'Sinh

J Sinh