JavaScript/特定のキー入力を抑止する
キーワード
- JavaScript
- jQuery
概要
Ctrl+Cなどのキー入力を抑止したいというユーザーからの要望を抑えられなかったときのメモです。
方法
document.onkeydown = function(e) {
var keycode;
var ctrl;
var shift;
var prevent = null;
// for something else IE
if (e != null) {
keycode = e.which;
ctrl = typeof e.modifiers == 'undefined' ? e.ctrlKey : e.modifiers & Event.CONTROL_MASK;
shift = typeof e.modifiers == 'undefined' ? e.shiftKey : e.modifiers & Event.SHIFT_MASK;
prevent = function() {
e.which = 0;
e.preventDefault();
e.stopPropagation();
};
}
// for IE
else {
keycode = window.event.keyCode;
ctrl = window.event.ctrlKey;
shift = window.event.shiftKey;
prevent = function() {
window.event.keyCode = 0;
window.event.returnValue = false;
window.event.cancelBubble = true;
};
}
// prevent
var keychar = String.fromCharCode(keycode).toUpperCase();
if (
(ctrl && keychar == 'C') ||
(ctrl && keychar == 'X') ||
(ctrl && keychar == 'P')
) {
prevent();
return false;
} else {
return true;
}
};
解説
キーイベント取得の仕方が IE とそれ以外で別の方法を採るようです。
イベントをなかったことにする記述はいろいろやってとにかくダメになるようにしました。
- キーコードに0を当てる
- イベントを操作する
- falseを返却する
参考
作成日 2014-02-05
