From Javascript's kiss
按下2键或者shift+ctrl+1键查看效果。
var KeyEvent = function(aKeyCode, oFlag){
this.keyCodes = aKeyCode || [];
this.key = oFlag ||
{};
}
KeyEvent.prototype._addListener = function(elem, type, handle, context){
var that = this;
var _handle = function(e){
e = e || window.event;
var codeFlag = true;
var keyFlag = true;
//检查参数指明的keyCode有没有
for (var i = 0, l = that.keyCodes.length; i < l; i++) {
if (e.keyCode !== that.keyCodes[i]) {
codeFlag = false;
}
}
//检查参数指明的ctrl,shift,alt键是否按下。
for (var k in that.key) {
if (!e[k]) {
keyFlag = false;
}
}
if (keyFlag && codeFlag) {
handle.call(context || elem, e);
}
}
if (elem.addEventListener) {
elem.addEventListener(type, _handle, false);
}
else if (elem.attachEvent) {
elem.attachEvent("on" + type, _handle);
}
else {
elem["on" + type] = _handle;
}
}
KeyEvent.prototype.keydown = function(handle, context){
this._addListener(document, "keydown", handle, context);
}
KeyEvent.prototype.keyup = function(handle, context){
this._addListener(document, "keyup", handle, context);
}
KeyEvent.prototype.keypress = function(handle, context){
this._addListener(document, "keypress", handle, context);
}
var Event = {
type: "keydown",
data: {
name: "Supersha"
}
}
onload = function(){
var key = new KeyEvent([49],{"shiftKey":true,"ctrlKey":true});
key.keydown(function(e){
alert(e.keyCode);
});
var key2 = new KeyEvent([50]);
key2.keydown(function(e){
alert(this.data.name);
}, Event);
}