我很好奇我如何用下面的jQuery插件代碼即時編寫這個問題的底部,可以實現關鍵的組合。它是如何工作的,到目前爲止是它允許用戶只需通過做一個正常的jQuery像語法創建關鍵命令和鍵盤命令提供了一個事件,像這樣:使用jQuery/JavaScript做關鍵組合
$(window).jkey('a',function(){
alert('you pressed the a key!');
});
或
$(window).jkey('b c d',function(){
alert('you pressed either the b, c, or d key!');
});
和最後,我要的是有能力做,但想不通:
$(window).jkey('alt+n',function(){
alert('you pressed alt+n!');
});
我知道如何做到這一點的插件外(上KEYUP設置一個VAR虛假和的keydown設置VAR真實和檢查如果var是當你按下其他鍵時是真的),但是當你不知道要按什麼鍵以及有多少鍵時,我不知道該怎麼做。我如何添加此支持?如果他們想要,我希望能夠讓他們做像alt+shift+a
或a+s+d+f
的事情。我無法理解如何實現這一點。有任何想法嗎?
我打算把它作爲一個開源插件發佈,我很樂意給予任何給我權利的人,工作,在博客文章和自己的代碼中回覆一些功勞。提前致謝!
(function($) {
$.fn.jkey = function(keyCombo,callback) {
if(keyCombo.indexOf(' ') > -1){ //If multiple keys are selected
var keySplit = keyCombo.split(' ');
}
else{ //Else just store this single key
var keySplit = [keyCombo];
}
for(x in keySplit){ //For each key in the array...
if(keySplit[x].indexOf('+') > -1){
//Key selection by user is a key combo... what now?
}
else{
//Otherwise, it's just a normal, single key command
}
switch(keySplit[x]){
case 'a':
keySplit[x] = 65;
break;
case 'b':
keySplit[x] = 66;
break;
case 'c':
keySplit[x] = 67;
break;
//And so on for all the rest of the keys
}
}
return this.each(function() {
$this = $(this);
$this.keydown(function(e){
if($.inArray(e.keyCode, keySplit) > -1){ //If the key the user pressed is matched with any key the developer set a key code with...
if(typeof callback == 'function'){ //and they provided a callback function
callback(); //trigger call back and...
e.preventDefault(); //cancel the normal
}
}
});
});
}
})(jQuery);
您正在全局範圍內定義'x'。 – 2010-11-04 23:42:41
我認爲範圍問題可以通過像這樣定義x和y來解決:var x =''; var y =''; ? – sebnitu 2010-11-05 01:13:31
或者更好的是,我們可以通過在for語句中添加var來定義它們? for(var x in keySplit){... – sebnitu 2010-11-05 01:18:34