92 行
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			92 行
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | jQuery.fn.shortkeys = jQuery.fn.keys = function (obj, settings) {		 | ||
|  | 	var el = this; | ||
|  | 	this.settings = jQuery.extend({ | ||
|  | 			split: "+", | ||
|  | 			moreKeys: {}			 | ||
|  | 		}, settings || {});	 | ||
|  | 	this.wackyKeys = { '.': 190, ',': 188, ';': 59,	'Space': 32	};	 | ||
|  | 	this.formElements  = new Array("input", "select", "textarea", "button"); | ||
|  | 	this.keys = new Array();	 | ||
|  | 	this.onFormElement = false; | ||
|  | 	this.keysDown = new Array(); | ||
|  | 	this.init = function (obj) { | ||
|  | 		for(x in this.wackyKeys) { | ||
|  | 			this.wackyKeys[x.toUpperCase()] = this.wackyKeys[x]; | ||
|  | 		} | ||
|  | 		for(x in obj) { | ||
|  | 			this.keys.push(x.split(this.settings.split)); | ||
|  | 		} | ||
|  | 		for(i in this.keys) { | ||
|  | 			var quickArr = new Array(); | ||
|  | 			for(j in this.keys[i]) { | ||
|  | 				quickArr.push(this.convertToNumbers(this.keys[i][j].toUpperCase())); | ||
|  | 			} | ||
|  | 			quickArr.sort(); | ||
|  | 			this.keys[i] = quickArr; | ||
|  | 		} | ||
|  | 	};	 | ||
|  | 	this.convertToNumbers = function (inp) { | ||
|  | 		if (this.wackyKeys[inp] != undefined) { | ||
|  | 			return this.wackyKeys[inp]; | ||
|  | 		} | ||
|  | 		return inp.toUpperCase().charCodeAt(0); | ||
|  | 	};	 | ||
|  | 	this.keyAdd = function(keyCode) { | ||
|  | 		this.keysDown.push(keyCode); | ||
|  | 		this.keysDown.sort(); | ||
|  | 	}; | ||
|  | 	this.keyRemove = function (keyCode) { | ||
|  | 		for(i in this.keysDown) { | ||
|  | 			if(this.keysDown[i] == keyCode) { | ||
|  | 				this.keysDown.splice(i,1); | ||
|  | 			} | ||
|  | 		};	 | ||
|  | 		this.keysDown.sort();	 | ||
|  | 	};		 | ||
|  | 	this.keyTest = function (i) { | ||
|  | 		if (this.keys[i].length != this.keysDown.length) return false; | ||
|  | 		for(j in this.keys[i]) { | ||
|  | 			if(this.keys[i][j] != this.keysDown[j]) { | ||
|  | 				return false; | ||
|  | 			} | ||
|  | 		}	 | ||
|  | 		return true; | ||
|  | 	}; | ||
|  | 	this.keyRemoveAll = function () { | ||
|  | 		this.keysDown = new Array();	 | ||
|  | 	}; | ||
|  | 	this.focused = function (bool) { | ||
|  | 		this.onFormElement = bool; | ||
|  | 	}	 | ||
|  | 	$(document).keydown(function(e) { | ||
|  | 		el.keyAdd(e.keyCode); | ||
|  | 		var i = 0; | ||
|  | 		for(x in obj) { | ||
|  | 			if(el.keyTest(i) && !el.onFormElement) { | ||
|  | 				obj[x](); | ||
|  | 				return false; | ||
|  | 				break;	 | ||
|  | 			}			 | ||
|  | 			i++; | ||
|  | 		};	 | ||
|  | 	});	 | ||
|  | 	$(document).keyup(function (e) { | ||
|  | 		el.keyRemove(e.keyCode); | ||
|  | 	});	 | ||
|  | 	for(x in this.formElements) { | ||
|  | 		$(this.formElements[x]).focus( function () { | ||
|  | 			el.focused(true); | ||
|  | 		}); | ||
|  | 		$(this.formElements[x]).blur( function () { | ||
|  | 			el.focused(false); | ||
|  | 		}); | ||
|  | 	}	 | ||
|  | 	$(document).focus( function () { | ||
|  | 		el.keyRemoveAll(); | ||
|  | 	}); | ||
|  | 	 | ||
|  | 	this.init(obj); | ||
|  | 	jQuery.extend(this.wackyKeys, this.settings.moreKeys); | ||
|  | 
 | ||
|  | 	return this; | ||
|  | } |