Witam

Zdaje sobie sprawę, że istnieją gotowce w tej kwestii, ale robię to do szkoły i w ostateczności chcę z nich korzystać. Moje podejście jest trochę inne, toporne, ale nie wiem dlaczego skrypt działa tylko pod ff i operą...

Może mam fuksa, że w ogóle to działa, ale może jednak da się go przerobić by działało w całej reszcie...

Poprawiłem nie co skrypt, teraz działa, aletylko w przypadku liter i to po dodaniu funkcji toUpperChar()
W innym przypadku kody znaku w zmiennych triggerKeyCode i charCode różnią się, tak samo jeśli użyje znaku innego niż litery alfabetu, np '[', wtedy skrypt nigdzie nie działa, kody zwracane przez charCodeAt() i evt.keyCode też różnią się. Jeśli skrypt działa to dla odmiany tylko w FF/Safari. O co tutaj chodzi?

(function($) {
		  
		  $.fn.trim = function(value) {
			  while (value.indexOf(' ') == 0) 
					  		value = value.slice(1, value.length);
			  while (value.lastIndexOf(' ') == value.length - 1)
			  				value = value.slice(0, value.length - 1);
			  return value;
		  }
		 var trim = $.fn.trim;
		  
		  
		  $.fn.hotkeys = function(shortCut, settings) {
				if (shortCut === undefined || typeof shortCut !== 'string' || trim(shortCut).lenght == 0)
					throw new Error('Argument missing - shortCut');
					
				var settings = $.extend({}, $.fn.hotkeys.defaultSettings, settings);
				var assistKey = '';
				var triggerKeyCode = 0;
				var keyListener = this;
				keyListener.attr('tabIndex', -1).css('outline', 0);
				
				setKeysFromShortCutIfValid(shortCut);
				
				keyListener.keydown(function(evt) {			
									console.log(evt.keyCode);
										if (checkIfAssistKeyIsPressed(evt, assistKey)) {
												var charCode = evt.which || evt.keyCode; 
												if (charCode == triggerKeyCode) 
													settings.doAction(); 
										}
									});
				
				function setKeysFromShortCutIfValid(shortCut) {
					shortCut = trim(shortCut);
					var separatorIdx = shortCut.indexOf(settings.keySeparator);
					if (separatorIdx == -1) throw new Error('Incorrect shortcut string format');
					assistKey = trim(shortCut.slice(0, separatorIdx));
					var triggerKeyName = trim(shortCut.slice(separatorIdx+1, shortCut.length)).toUpperCase();
					if (triggerKeyName.length > 1) throw new Error('Trigger key must be only a single char');
					triggerKeyCode = triggerKeyName.charCodeAt(0);
				}
				
				function checkIfAssistKeyIsPressed(evt, assistKeyName) {
					var evt = evt.originalEvent;
					switch (assistKeyName) {
								case 'alt': if (evt.altKey) return true;
								case 'ctrl': if (evt.ctrlKey) return true;
								case 'shift': if (evt.shiftKey) return true;
								default: return false;
						}
				}
			return this; 
		  }
		  
		  $.fn.hotkeys.defaultSettings = {
				keySeparator : '+', 
				doAction: function(evt) {
					alert('sdsadsad');
				}
		  }
})(jQuery);