From 3a57000d86511fd6e89a35971b62a824a43f79b3 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Sun, 24 May 2015 04:04:27 +0800 Subject: [PATCH] form controls filter. --- build/hotkeys.min.js | 153 +------------------------------------------ src/hotkeys.js | 10 ++- 2 files changed, 10 insertions(+), 153 deletions(-) diff --git a/build/hotkeys.min.js b/build/hotkeys.min.js index b8df32d..8c8126c 100644 --- a/build/hotkeys.min.js +++ b/build/hotkeys.min.js @@ -1,152 +1 @@ -Array.indexOf || (Array.prototype.indexOf = function(a) { - for (var b = 0; b < this.length; b++) if (this[b] === a) return b; - return -1; -}), function(a, b) { - var c = b(a); - if ("function" == typeof define && define.amd) define("hotkeys", function() { - return c; - }); else if ("object" == typeof exports) module.exports = c; else { - var d = a.hotkeys; - c.noConflict = function() { - var b = a.hotkeys; - return a.hotkeys = d, b; - }, a.hotkeys = c; - } -}(this, function(a, b) { - function c(a) { - r = a || "all"; - } - function d() { - return r || "all"; - } - function e(a, b, c) { - a.addEventListener ? a.addEventListener(b, c, !1) : a.attachEvent && a.attachEvent("on" + b, function() { - c(window.event); - }); - } - function f(a) { - return "string" == typeof a && (a = w(a)), -1 !== t.indexOf(a); - } - function g(a) { - return t.slice(0); - } - function h(a) { - var b, c, e, f = a.keyCode; - if (-1 === t.indexOf(f) && t.push(f), (93 === f || 224 === f) && (f = 91), f in v) { - v[f] = !0; - for (var g in s) s[g] === f && (o[g] = !0); - } else { - for (var h in v) v[h] = a[u[h]]; - if (f in x) for (c = d(), i = 0; i < x[f].length; i++) if (e = x[f][i], e.scope === c || "all" === e.scope) { - b = e.mods.length > 0; - for (var j in v) (!v[j] && e.mods.indexOf(+j) > -1 || v[j] && -1 === e.mods.indexOf(+j)) && (b = !1); - (0 !== e.mods.length || v[16] || v[18] || v[17] || v[91]) && !b || e.method(a, e) === !1 && (a.preventDefault ? a.preventDefault() : a.returnValue = !1, - a.stopPropagation && a.stopPropagation(), a.cancelBubble && (a.cancelBubble = !0)); - } - } - } - function j(a, c) { - var e, f, g = n(a), h = []; - console.log(g.length); - for (var i = 0; i < g.length; i++) { - if (e = g[i].split("+"), e.length > 1 && (h = m(e)), a = e[e.length - 1], a = w(a), - c === b && (c = d()), !x[a]) return; - for (var j = 0; j < x[a].length; j++) f = x[a][j], f.scope === c && l(f.mods, h) && (x[a][j] = {}); - } - } - function l(a, b) { - if (a.length !== b.length) return !1; - for (var c = 0; c < a.length; c++) if (a[c] !== b[c]) return !1; - return !0; - } - function m(a) { - for (var b = a.slice(0, a.length - 1), c = 0; c < b.length; c++) b[c] = s[b[c]]; - return b; - } - function n(a) { - var b; - return a = a.replace(/\s/g, ""), b = a.split(","), "" === b[b.length - 1] && (b[b.length - 2] += ","), - b; - } - function o(a, c, d) { - var e = n(a), f = [], g = 0; - for (d === b && (d = c, c = "all"); g < e.length; g++) a = e[g].split("+"), f = [], - a.length > 1 && (f = m(a), a = [ a[a.length - 1] ]), a = a[0], a = w(a), a in x || (x[a] = []), - x[a].push({ - shortcut: e[g], - scope: c, - method: d, - key: e[g], - mods: f - }); - } - var p, q = { - backspace: 8, - tab: 9, - clear: 12, - enter: 13, - "return": 13, - esc: 27, - escape: 27, - space: 32, - left: 37, - up: 38, - right: 39, - down: 40, - del: 46, - "delete": 46, - home: 36, - end: 35, - pageup: 33, - pagedown: 34, - ",": 188, - ".": 190, - "/": 191, - "`": 192, - "-": 189, - "=": 187, - ";": 186, - "'": 222, - "[": 219, - "]": 221, - "\\": 220 - }, r = "all", s = { - "⇧": 16, - shift: 16, - "⌥": 18, - alt: 18, - option: 18, - "⌃": 17, - ctrl: 17, - control: 17, - "⌘": 91, - command: 91 - }, t = [], u = { - 16: "shiftKey", - 18: "altKey", - 17: "ctrlKey", - 91: "metaKey" - }, v = { - 16: !1, - 18: !1, - 17: !1, - 91: !1 - }, w = function(a) { - return q[a] || a.toUpperCase().charCodeAt(0); - }, x = {}; - for (k = 1; k < 20; k++) q["f" + k] = 111 + k; - e(document, "keydown", function(a) { - h(a); - }), e(document, "keyup", function(a) { - var b = a.keyCode, c = t.indexOf(b); - c >= 0 && t.splice(c, 1); - }), p = { - setScope: c, - getScope: d, - getPressedKeyCodes: g, - isPressed: f, - unbind: j - }; - for (var y in p) o[y] = p[y]; - return o; -}); \ No newline at end of file +if(!Array.indexOf){Array.prototype.indexOf=function(a){for(var b=0;b0;for(var n in j){if(!j[n]&&e.mods.indexOf(+n)>-1||j[n]&&e.mods.indexOf(+n)===-1)c=false}if(e.mods.length===0&&!j[16]&&!j[18]&&!j[17]&&!j[91]||c){if(e.method(a,e)===false){if(a.preventDefault)a.preventDefault();else a.returnValue=false;if(a.stopPropagation)a.stopPropagation();if(a.cancelBubble)a.cancelBubble=true}}}}}function t(a,c){var d=x(a),e,f=[],g;for(var h=0;h1)f=w(e);a=e[e.length-1];a=l(a);if(c===b)c=o();if(!m[a])return;for(var i=0;i=0)g.splice(c,1)});function y(a,c,d){var e=x(a),f=[],g=0;if(d===b){d=c;c="all"}for(;g1){f=w(a);a=[a[a.length-1]]}a=a[0];a=l(a);if(!(a in m))m[a]=[];m[a].push({shortcut:e[g],scope:c,method:d,key:e[g],mods:f})}}c={setScope:n,getScope:o,getPressedKeyCodes:r,isPressed:q,filter:v,unbind:t};for(var z in c)y[z]=c[z];return y}); \ No newline at end of file diff --git a/src/hotkeys.js b/src/hotkeys.js index cf37798..30551c4 100644 --- a/src/hotkeys.js +++ b/src/hotkeys.js @@ -103,6 +103,8 @@ if(!Array.indexOf){ } //将modifierMap里面的修饰键绑定到event中 for(var e in _mods) _mods[e] = event[modifierMap[e]]; + //表单控件控件过滤 默认表单控件不触发快捷键 + if(!hotkeys.filter.call(this,event)) return; // key 不在_handlers中返回 if (!(key in _handlers)) return; //获取范围 默认为all @@ -132,7 +134,6 @@ if(!Array.indexOf){ //解除绑定某个范围的快捷键 function unbind (key,scope) { var multipleKeys = getKeys(key),keys,mods = [],obj; - console.log( multipleKeys.length); for (var i = 0; i < multipleKeys.length; i++) { //将组合快捷键拆分为数组 @@ -170,6 +171,12 @@ if(!Array.indexOf){ } return true; } + //表单控件控件判断 返回 Boolean + function filter(event){ + var tagName = (event.target || event.srcElement).tagName; + //忽略这些标签情况下快捷键无效 + return !(tagName === 'INPUT' || tagName === 'SELECT' || tagName === 'TEXTAREA'); + } //修饰键转换成对应的键码 function getMods (key) { var mods = key.slice(0, key.length - 1); @@ -224,6 +231,7 @@ if(!Array.indexOf){ getScope:getScope, getPressedKeyCodes:getPressedKeyCodes, isPressed:isPressed, + filter:filter, unbind:unbind }; for (var a in _api) hotkeys[a] = _api[a];