キーワード

概要

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 とそれ以外で別の方法を採るようです。

イベントをなかったことにする記述はいろいろやってとにかくダメになるようにしました。

参考

Last-modified: 2014-02-05 (水) 20:08:44 (2055d)