Skróty klawiaturowe z jQuery

186

Jak mogę przesłać zdarzenie do odpalenia, jeśli ktoś naciśnie list g?

(Gdzie jest mapa znaków dla wszystkich liter BTW?)

T Zengerink
źródło
3
Mapa znaków dla wszystkich liter na tej eleganckiej stronie: rmhh.co.uk/ascii.html
Trevor
Inną przydatną stroną z kodami kluczy jest keycode.info
npad

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

npad
źródło
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);
Ionuț Staicu
źródło
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

Craig
źródło
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 .

po prostu trudne
źródło
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
  }
});
Michael Koper
źródło
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

myśliwy
źródło
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 :(
8

Możesz także wypróbować wtyczkę jQuery shortKeys . Przykład użycia:

$(document).shortkeys({
  'g': function () { alert('g'); }
});
Brant Bobby
źródło
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

Maikeximu
źródło
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.

realdanielbyrne
źródło
1

Podobnie jak @craig, niedawno zbudowałem bibliotekę skrótów.

https://github.com/blainekasten/shortcut.js

Łańcuchowy interfejs API z obsługą wielu funkcji powiązanych z jednym skrótem.

Blaine Kasten
źródło
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>

Universal Omega
źródło
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>
Społeczność
źródło