home wiki.fukuchiharuki.me
Menu

キーワード

  • 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を返却する

参考