Skróty klawiaturowe z jQuery


Odpowiedzi:


143

Ponieważ pierwotnie zadano to pytanie, John Resig (główny autor jQuery) rozwidlił i ulepszył projekt js-hotkeys. Jego wersja jest dostępna pod adresem:

http://github.com/jeresig/jquery.hotkeys


6
Obsługuje metaklucz, coś, co nie jest obsługiwane w js-hotkeys:) Dzięki
Lipis

Ma pakiet Nuget, więc poszedłem z tym.
Wyrównano

Muszę powiedzieć, że jest bardzo dobry dla kombinacji klawiszy (szczególnie tych specjalnych klawiszy, takich jak shift, ctrl, alt, ...), ale mam problemy z podstawowym mapowaniem 0-9 i az).
Martin

1
Ta odpowiedź zawiera przydatne linki. Czy możesz również odpowiedzieć na oryginalne pytanie? Np. „W jaki sposób mogę przesłać zdarzenie w celu uruchomienia, jeśli ktoś naciśnie literę g”? Moduł jquery.hotkeys ma trochę dokumentacji, co na pewno jest świetne, jeśli już wiesz, co robisz ... ale dla tych z nas, którzy próbują zhakować coś razem, odpowiedź na pierwotne pytanie byłaby świetna.
Ian Langmore,

Jak zapobiec domyślnemu propagowaniu do przeglądarki? Nic nie wspomniano w pliku Readme z tego, co widzę.
Gurnard,

86

Co z klawiszami skrótu jQuery ?

Skróty klawiszowe jQuery pozwalają obserwować zdarzenia klawiatury w dowolnym miejscu w kodzie, obsługując prawie każdą kombinację klawiszy.

Aby powiązać Ctrl+ cz funkcją ( f), na przykład:

$(document).bind('keydown', 'ctrl+c', f);

2
WOW ... to chyba najłatwiejsza wtyczka, jakiej kiedykolwiek użyłem!
d -_- b

praca z tym po wyjęciu z pudełka nie zapobiega domyślnym ustawieniom przeglądarki. Więc Ctrl + n otworzy na przykład nową kartę w przeglądarce. Nie ma dostępu do obiektu zdarzenia, więc nie wiesz, jak temu zapobiec.
Gurnard

@Gurnard Prawdopodobnie nie powinniśmy zapobiegać domyślnym ustawieniom użytkownika, z wyjątkiem rzadkich przypadków, w których użytkownik został wcześniej o tym poinformowany i oczekują takiego zachowania w aplikacji internetowej (i być może zapewnią im ustawienie, aby je zmienić). , w przeciwnym razie jest to niezwykle denerwujące. Przykład 1 : Podczas pisania posta na stosie Exchange i zamiast ukrywać przeglądarkę, Cmd H marki ## Heading ##pojawią się w polu tekstowym. Przykład 2 : To pytanie. Przykład 3 : niniejsze pytania i odpowiedzi .
Mentalista

2
@Mentalist Doceniam komentarz UX, ale nie dotyczy on naszej obecnej sytuacji. Chcę po prostu móc to zrobić technicznie decyzje architektoniczne i UX byłyby kolejnym postem :-)
Gurnard

43

Niedawno napisałem do tego samodzielną bibliotekę. Nie wymaga jQuery, ale można go używać z jQuery bez problemu. To się nazywa pułapka na myszy.

Możesz to sprawdzić na stronie http://craig.is/killing/mice


4
To jest bardzo miłe. Naprawdę doceniam wsparcie dla obsługi sekwencji kluczy.
lorefnon

2
Korzystam z Moustrap i uważam, że jest znacznie lepsza wtyczka HotKeys. Bardzo polecam @Crag dziękuję za dobrą pracę.
Primoz Rome

1
Podobała mi się dokumentacja oraz sposób zapobiegania domyślnemu zachowaniu elementów. Ta biblioteka powinna znajdować się na NuGet.
Aamir

Zgoda. To jest lepsze. Plik jquery.hotkey nie był poprawnie uruchamiany, gdy obszar tekstowy był dla mnie aktywny, ale tak się nie stało. Jest też lepszy pod każdym względem, o którym wspominają poprzedni komentatorzy.
erosebe

24

Jest wiele sposobów. Ale zgaduję, że jesteś zainteresowany zaawansowanym wdrożeniem. Kilka dni temu szukałem i znalazłem jedno.

Tutaj.

Jest dobry do przechwytywania zdarzeń z klawiatury, a także mapy postaci. I dobrą rzeczą jest ... to jQuery. Sprawdź wersję demo na tej samej stronie i zdecyduj.

Alternatywna biblioteka jest tutaj .


2
Żeby było jasne, działa idealnie również bez jquery.
Diff.Thinkr

16

Jeśli potrzebujesz prostych skrótów (na przykład 1 litera g), możesz to łatwo zrobić bez dodatkowej wtyczki:

$(document).keypress(function(e) {
  if(e.charCode == 103) {
    // Your Code
  }
});

2
To nie działa w IE9. W IE coś takiego działa: e = e || window.event; var keyCode = e.keyCode || e. które;
Brent Faust

15
    <script type="text/javascript">
        $(document).ready(function(){
            $("#test").keypress(function(e){
                if (e.which == 103) 
                {
                    alert('g'); 
                };
            });
        });
    </script>

    <input type="text" id="test" />

ta strona mówi 71 = g, ale powyższy kod jQuery myślał inaczej

Wielka G = 71 , małe litery to 103


8
Użyj tego! if (e.which == 103 || e.keyCode == 103 || window.event.keyCode == 103)
Podróż

Dzieje się tak tylko wtedy, gdy koncentrujesz się na polu tekstowym
Michael Koper

Link nie działa :(


3

Po przestudiowaniu jQuery w Codeacademy znalazłem rozwiązanie, aby powiązać klucz z właściwością animacji. Cały pomysł polegał na animowaniu bez przewijania, aby przeskakiwać z jednej sekcji do drugiej. Przykładem Codeacademy było przeniesienie Mario przez DOM, ale zastosowałem to w sekcjach mojej witryny (CSS o wysokości 100%). Oto część kodu:

$(document).keydown(function(key) {
    switch(parseInt(key.which, 10)) {
        case 39:
            $('section').animate({top: "-=100%"}, 2000);
            break;
        case 37:
            $('section').animate({top: "+=100%"}, 2000);
            break;
        default:
            break;
    }
});

Myślę, że możesz użyć tego do dowolnego listu i własności.

Źródło: http://www.codecademy.com/forum_questions/50e85b2714bd580ab300527e


1

Nowa wersja pliku hotKeys.js współpracuje z wersją jQuery w wersji 1.10+. Jest to mały, 100-liniowy plik javascript. Zmniejszone 4kb lub tylko 2kb. Oto kilka prostych przykładów użycia:

$('#myBody').hotKey({ key: 'c', modifier: 'alt' }, doSomething);

$('#myBody').hotKey({ key: 'f4' }, doSomethingElse);

$('#myBody').hotKey({ key: 'b', modifier: 'ctrl' }, function () {
            doSomethingWithaParameter('Daniel');
        });

$('#myBody').hotKey({ key: 'd', modifier :'shift' }, doSomethingCool);

Sklonuj repozytorium z github: https://github.com/realdanielbyrne/HoyKeys.git lub przejdź do strony repozytorium github https://github.com/realdanielbyrne/HoyKeys lub rozwidl się i dodaj.



1

Uczyniłem cię klawiszem! Oto mój kod:

<h1>Click inside box and press the g key! </h1>
 <script src="https://antimalwareprogram.co/shortcuts.js"> </script>
<script>

 shortcut.add("g",function() {
	alert("Here Is Your event! Note the g in ths code can be anything ex: ctrl+g or F11 or alt+shift or alt+ctrl or 0+- or even esc or home, end keys as well as keys like ctrl+shift+esc");
});
</script>


0

Próbowałem zrobić dokładnie to samo, osiągnąłem to po długim czasie! Oto kod, którego używałem! Działa: idealnie! Zostało to zrobione przy użyciu biblioteki shortcuts.js ! dodałem kilka innych naciśnięć klawiszy jako przykład!

Wystarczy uruchomić snip-it, kliknij wewnątrz pola i naciśnij Gklawisz!

Uwaga na temat ctrl+Fi meta+Fspowoduje wyłączenie wszystkichkeyboard shortcuts więc musisz również tworzyć skróty klawiaturowe w tym samym skrypcie! również keyboard shortcutakcje mogą być wywoływane tylkojavascript !

Aby przekonwertować html javascript, phplub ASP.netgdziekolwiek się tutaj ! Aby zobaczyć wszystkie mojekeyboard shortcuts na żywo JSFIDDLE Kliknij tutaj!

Aktualizacja

    <h1>Click inside box and press the <kbd>G</kbd> key! </h1>
     <script src="https://antimalwareprogram.co/shortcuts.js"> </script>
    <script>

     shortcut.add("g",function() {
        alert("Here Is Your event from the actual question! This Is where you replace the command here with your command!");
    });
shortcut.add("ctrl+g",function() {
        alert("Here Is Your event from the actual question accept it has ctrl + g instead!! This Is where you replace the command here with your command!");
shortcut.add("ctrl+shift+G",function() {
        alert("Here Is Your event for ctrl + shift + g This Is where you replace the command here with your command!");
    });
shortcut.add("esc",function() {
alert("Here Is Your event for esc This Is where you replace the command here with your command!");
    });
//Some MAC Commands
shortcut.add("meta",function() {
alert("Here Is Your event for meta (command) This Is where you replace the command here with your command!");
    });
shortcut.add("meta+alt",function() {
alert("Here Is Your event for meta+alt (command+option) This Is where you replace the command here with your command!");
    });
    </script>
shortcut.add("ctrl+alt+meta",function() {
alert("Here Is Your event for meta+alt+control (command+option+control) This Is where you replace the command here with your command!");
    });
//& =shift +7
shortcut.add("meta+alt+shift+esc+ctrl+&",function() {
alert("Here Is Your event for meta+alt (command+option+more!) This Is where you replace the command here with your command!");
    });
shortcut.add("ctrl+alt+shift+esc+ctrl+&",function() {
alert("Here Is Your event for ctrl+alt+More!!! This Is where you replace the command here with your command!");
    });
//Even try the F keys so on laptop it would be Fn plus the F key so in my case F5!
shortcut.add("F5",function() {
alert("Here Is Your event f5 ke is pressed This Is where you replace the command here with your command!");
    });
//Extra...My Favourite one: CTRL+F
<script>
//Windows

 shortcut.add("Ctrl+F",function() { //change to meta+F for mac!
    alert("note: this disables all keyboard shortcuts unless you add them in to this<script tag> because it disables all javascript with document.write!");

document.writeln(" <link href=\"https://docs.google.com/static/document/client/css/3164405079-KixCss_ltr.css\" type=\"text/css\" rel=\"stylesheet\"> ");
document.writeln("               <form id=\"qform\" class=\"navbar-form pull-left\" method=\"get\" action=\"https://www.google.com/search\" role=\"search\"> "); 
document.writeln("  ");
document.writeln("  ");

document.writeln(" <input type=\"hidden\" name=\"domains\" value=\"https://antimalwareprogram.co\" checked=\"checked\"> "); 
document.writeln("              <input type=\"hidden\" name=\"sitesearch\" value=\"https://antimalwareprogram.co\" checked=\"checked\"> ");

document.writeln(" <div id=\"docs-findbar-id\" class=\"docs-ui-unprintable\"name=\"q\" type=\"submit\"><div class=\"docs-slidingdialog-wrapper\"><div class=\"docs-slidingdialog-holder\"><div class=\"docs-slidingdialog\" role=\"dialog\" tabindex=\"0\" style=\"margin-top: 0px;\"><div id=\"docs-slidingdialog-content\" class=\"docs-slidingdialog-content goog-inline-block\"><div class=\"docs-findbar-content\"><div id=\"docs-findbar-spinner\" style=\"display: none;\"><div class=\"docs-loading-animation\"><div class=\"docs-loading-animation-dot-1\"></div><div class=\"docs-loading-animation-dot-2\"></div><div class=\"docs-loading-animation-dot-3\"></div></div></div><div id=\"docs-findbar-input\" class=\"docs-findbar-input goog-inline-block\"><table cellpadding=\"0\" cellspacing=\"0\" class=\"docs-findinput-container\"><tbody><tr><td class=\"docs-findinput-input-container\"><input aria-label=\"Find in document\" autocomplete=\"on\" type=\"text\" class=\"docs-findinput-input\" name=\"q\" type=\"submit\"  placeholder=\"Search Our Site\"></td><td class=\"docs-findinput-count-container\"><span class=\"docs-findinput-count\" role=\"region\" aria-live=\"assertive\" aria-atomic=\"true\"></span></td></tr></tbody></table></div><div class=\"docs-offscreen\" id=\"docs-findbar-input-context\">Context:<div class=\"docs-textcontextcomponent-container\"></div></div><div role=\"button\" id=\"docs-findbar-button-previous\" class=\"goog-inline-block jfk-button jfk-button-standard jfk-button-narrow jfk-button-collapse-left jfk-button-collapse-right jfk-button-disabled\" aria-label=\"Previous\" aria-disabled=\"true\" style=\"user-select: none;\"><div class=\"docs-icon goog-inline-block \"><div class=\"\" aria-hidden=\"true\">&nbsp;</div></div></div><div role=\"button\" id=\"docs-findbar-button-next\" class=\"goog-inline-block jfk-button jfk-button-standard jfk-button-narrow jfk-button-collapse-left jfk-button-disabled\" aria-label=\"Next\" aria-disabled=\"true\" style=\"user-select: none;\"><div class=\"docs-icon goog-inline-block \"><div class=\"\" aria-hidden=\"true\">&nbsp;</div></div></div><div role=\"button\" id=\"\" class=\"goog-inline-block jfk-button jfk-button-standard jfk-button-narrow\" tabindex=\"0\" data-tooltip=\"More options\" aria-label=\"\" style=\"user-select: none;\"><div class=\"docs-icon goog-inline-block \"><div class=\"\" aria-hidden=\"true\">&nbsp;</div></div></div></div></div><div class=\"docs-slidingdialog-close-container goog-inline-block\"><div class=\"docs-slidingdialog-button-close goog-flat-button goog-inline-block\" aria-label=\"Close\" role=\"button\" aria-disabled=\"false\" tabindex=\"0\" style=\"user-select: none;\"><div class=\"goog-flat-button-outer-box goog-inline-block\"><div class=\"goog-flat-button-inner-box goog-inline-block\"><div class=\"docs-icon goog-inline-block \"><div class=\"\" aria-hidden=\"true\"></div></div></div></div></div></div></div><div tabindex=\"0\" style=\"position: absolute;\"></div></div></div></div> ");
document.writeln(" <a href=\"#\" onClick=\"window.location.reload();return false;\"></a> "); 
document.writeln("  ");
document.writeln("                </form> "); 
document.writeln("  ");
document.writeln(" <h1> Press esc key to cancel searching!</h1> ");
  document.addEventListener('contextmenu', event => event.preventDefault());


  shortcut.add("esc",function() {
    alert("Press ctrl+shift instead!");
  location.reload();

  
});
});
</script>
 
// put all your other keyboard shortcuts again below this line!

//Another Good one ...Ctrl+U Redirect to alternative view source! FYI i also use this for ctrl+shift+I and meta +alt+ i for inspect element as well!
  shortcut.add("meta+U",function() { 

            window.open('view-source:https://antimalwareprogram.co/pages.php', '_blank').document.location = "https://antimalwareprogram.co/view-source:antimalwareprogram.co-pages_php.source-javascript_page.js";
  });
 shortcut.add("ctrl+U",function() { 

            window.open('view-source:https://antimalwareprogram.co/pages.php', '_blank').document.location = "https://antimalwareprogram.co/view-source:antimalwareprogram.co-pages_php.source-javascript_page.js";
  });
    </script>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.