JQuery 또는 JavaScript : 앵커 태그 하이퍼 링크를 클릭하는 동안 Shift 키를 눌렀는지 확인하는 방법은 무엇입니까?
JavaScript 함수를 호출하는 앵커 태그가 있습니다.
JQuery를 사용하거나 사용하지 않고 링크를 클릭하는 동안 Shift 키가 눌러져 있는지 어떻게 확인합니까?
다음 코드는 "실제 키"(Shift 키 아님)를 눌렀을 때만 키 누르기가 실행되기 때문에 작동하지 않습니다. (나는 시프트 키만 눌려도 실행되기를 바랬다.)
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
}
$(document).on('keyup keydown', function(e){shifted = e.shiftKey} );
다음은 JavaScript의 각 키 입력에 대한 키 코드입니다. 이를 사용하여 사용자가 Shift 키를 눌렀는지 감지 할 수 있습니다.
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
모든 브라우저가 키 누르기 이벤트를 잘 처리하는 것은 아니므로 다음과 같이 키 업 또는 키 다운 이벤트를 사용하십시오.
$(document).keydown(function (e) {
if (e.keyCode == 16) {
alert(e.which + " or Shift was pressed");
}
});
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.
I had a similar problem, trying to capture a 'shift+click' but since I was using a third party control with a callback rather than the standard click
handler, I didn't have access to the event object and its associated e.shiftKey
.
I ended up handling the mouse down event to record the shift-ness and then using it later in my callback.
var shiftHeld = false;
$('#control').on('mousedown', function (e) { shiftHeld = e.shiftKey });
Posted just in case someone else ends up here searching for a solution to this problem.
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.
I have used a method to test if any specific key is pressed by storing the currently pressed key codes in an array:
var keysPressed = [],
shiftCode = 16;
$(document).on("keyup keydown", function(e) {
switch(e.type) {
case "keydown" :
keysPressed.push(e.keyCode);
break;
case "keyup" :
var idx = keysPressed.indexOf(e.keyCode);
if (idx >= 0)
keysPressed.splice(idx, 1);
break;
}
});
$("a.shifty").on("click", function(e) {
e.preventDefault();
console.log("Shift Pressed: " + (isKeyPressed(shiftCode) ? "true" : "false"));
});
function isKeyPressed(code) {
return keysPressed.indexOf(code) >= 0;
}
The excellent JavaScript library KeyboardJS handles all types of key presses including the SHIFT key. It even allows specifying key combinations such as first pressing CTRL+x and then a.
KeyboardJS.on('shift', function() { ...handleDown... }, function() { ...handleUp... });
If you want a simple version, head to the answer by @tonycoupland):
var shiftHeld = false;
$('#control').on('mousedown', function (e) { shiftHeld = e.shiftKey });
This works great for me:
function listenForShiftKey(e){
var evt = e || window.event;
if (evt.shiftKey) {
shiftKeyDown = true;
} else {
shiftKeyDown = false;
}
}
A more modular approach plus the ability to keep your this
scope in the listeners:
var checkShift = function(fn, self) {
return function(event) {
if (event.shiftKey) {
fn.call(self, event);
}
return true;
};
};
$(document).on('keydown', checkShift(this.enterMode, this));
For checking if the shiftkey is pressed while clicking with the mouse, there is an exact property in the click event object: shiftKey (and also for ctrl and alt and meta key): https://www.w3schools.com/jsref/event_shiftkey.asp
So using jQuery:
$('#anchor').on('click', function (e) {
if (e.shiftKey) {
// your code
}
});
var shiftDown = false;
this.onkeydown = function(evt){
var evt2 = evt || window.event;
var keyCode = evt2.keyCode || evt2.which;
if(keyCode==16)shiftDown = true;
}
this.onkeyup = function(){
shiftDown = false;
}
If anyone's looking to detect a given key and needs to know the status of the "modifiers" (as they are called in Java), i.e. Shift, Alt and Control keys, you can do something like this, which responds to keydown
on key F9, but only if none of the Shift, Alt or Control keys is currently pressed.
jqMyDiv.on( 'keydown', function( e ){
if( ! e.shiftKey && ! e.altKey && ! e.ctrlKey ){
console.log( e );
if( e.originalEvent.code === 'F9' ){
// do something
}
}
});
'IT story' 카테고리의 다른 글
AppDelegate 인스턴스 변수 참조 (0) | 2020.09.17 |
---|---|
iOS의 NSURLConnection 및 기본 HTTP 인증 (0) | 2020.09.17 |
jQuery UI datepicker에서 날짜를 얻는 방법 (0) | 2020.09.17 |
'System.Net.Http.HttpContent'에 'ReadAsAsync'에 대한 정의가없고 확장 메서드가 없습니다. (0) | 2020.09.17 |
명령 줄을 사용하여 Nupkg 파일 추출 (0) | 2020.09.17 |