Tôi tò mò về cách tôi, với đoạn mã jQuery plugin sau đây được viết ở cuối câu hỏi này, có thể thực hiện các combo chính. Làm thế nào nó hoạt động cho đến nay là nó cho phép người dùng để tạo ra các lệnh chốt chỉ đơn giản bằng cách thực hiện một jQuery bình thường như cú pháp và cung cấp một sự kiện cho các lệnh quan trọng, như vậy:Thực hiện các combo chính với jQuery/JavaScript
$(window).jkey('a',function(){
alert('you pressed the a key!');
});
hoặc
$(window).jkey('b c d',function(){
alert('you pressed either the b, c, or d key!');
});
và cuối cùng những gì tôi muốn là khả năng để làm, nhưng không thể tìm ra:
$(window).jkey('alt+n',function(){
alert('you pressed alt+n!');
});
tôi biết làm thế nào để làm điều này bên ngoài của các plugin (trên KeyUp thiết lập một var sai và trên KeyDown thiết lập var đúng và kiểm tra nếu var là đúng khi bạn bấm phím khác), nhưng tôi không biết làm thế nào để làm điều này khi bạn không biết những gì các phím sẽ được ép và bao nhiêu. Làm cách nào để thêm hỗ trợ này? Tôi muốn có thể cho phép họ làm những việc như alt+shift+a
hoặc a+s+d+f
nếu họ muốn. Tôi chỉ không thể có được đầu của tôi xung quanh làm thế nào để thực hiện điều này. Ý tưởng nào?
Tôi sẽ phát hành ứng dụng này dưới dạng plugin nguồn mở và tôi muốn cung cấp cho bất kỳ ai cho tôi quyền, làm việc, trả lời một số tín dụng trên bài đăng trên blog và trong mã là bản thân. Cảm ơn trước!
(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);
Bạn đang xác định 'x' trong phạm vi toàn cục. –
Tôi nghĩ rằng vấn đề phạm vi có thể được cố định bằng cách xác định x và y như thế này: var x = ''; var y = ''; ? – sebnitu
Hoặc tốt hơn, chúng ta có thể định nghĩa chúng bằng cách thêm var vào câu lệnh for? cho (var x trong keySplit) {... – sebnitu