Autor | Zpráva | ||
---|---|---|---|
SpotRudloff Profil |
#1 · Zasláno: 8. 9. 2010, 20:17:23
Zdravím Vás,
mám problém najít jak udělat v JS funkci, která když zdetekuje zmáčknutí klávesy na klávesnici, tak zavolá určitý sektor kódu. Myslím to tak, že např. po stisknutí klávesy W se zavolá funkce, kterou nastavým. Mohl by mi někdo poradit? Děkuju |
||
Witiko Profil |
#2 · Zasláno: 9. 9. 2010, 16:17:18 · Upravil/a: Witiko
Napojte si na objekt window onkeydown event a pak odchytněte danou klávesu:
if(!window.addEventListener) { window.addEventListener = function (type, listener, useCapture) { document.body.attachEvent('on' + type, listener); } } function chytej(e) { if(!e) e = window.event; if(e.keyCode == 87) { alert("Už tě mám!"); e.returnValue = false; return false; } else { return true; } } window.addEventListener("keydown", chytej, false); Případně jednoduše: document.body.onkeydown = function(e) { if(!e) e = window.event; if(e.keyCode == 87) { alert("Už tě mám!"); e.returnValue = false; return false; } else { return true; } } pokud víte, že nebudete chtít napojovat na onkeydown event window / document.body další funkce. |
||
SpotRudloff Profil |
#3 · Zasláno: 9. 9. 2010, 18:43:19
Moc děkuju za odpověď.
|
||
Časová prodleva: 3 dny
|
|||
SpotRudloff Profil |
#4 · Zasláno: 12. 9. 2010, 18:26:40
A nevíte někdo, jak udělat aby to detekovalo, že klávesu držím dole?
|
||
DJ Miky Profil |
#5 · Zasláno: 12. 9. 2010, 18:29:19
Událost onkeydown se zavolá při stisknutí klávesy, událost onkeyup při jejím uvolnění. Můžeš si třeba při stisknutí nastavit nějakou proměnnou na true a při uvolnění na false.
|
||
SpotRudloff Profil |
#6 · Zasláno: 12. 9. 2010, 18:39:20
Díky, funguje mi to.
|
||
Chamurappi Profil |
#7 · Zasláno: 12. 9. 2010, 18:44:50
Reaguji na DJ Mikyho:
Jen doplním, že u některých kláves (např. kurzorových) to v některých prohlížečích nemusí platit, událost onkeydown může být vyvolávána i při držení klávesy.
|
||
SpotRudloff Profil |
#8 · Zasláno: 12. 9. 2010, 19:40:41
Chamurappi:
Děkuju za informaci. :) |
||
Misha Profil * |
#9 · Zasláno: 13. 9. 2010, 14:24:32
Mám na webu fotogalerii a chci v ní použít posun mezi fotografiemi pomocí kurzorových kláves (šipky vlevo a vpravo). Výše zveřejněný script mi funguje s klávesou W, ale jakmile dám kód klávesy 109 (šipka vpravo) tak to neudělá nic. Neví někdo v čem je problém?
Testuji to na Mozille, přičemž takovéto posunování mezi fotografiemi mi na jiných webech funguje (rajče apod.) |
||
Witiko Profil |
#10 · Zasláno: 13. 9. 2010, 15:29:23 · Upravil/a: Witiko
Šipka vpravo je kód klávesy #39.
Pro určení kódu klávesy můžeš použít můj jednoduchý listener, který mám stranou vedle své hry hada. Nebo samozřejmě za pomoci kódu vlastního: document.body.onkeydown = function(e) { if(!e) e = window.event; if(e.keyCode) { alert(e.keyCode); e.returnValue = false; return false; } else { return true; } } Je tu i problematika s rozdílem keyCode eventu navráceného onkeypress a onkeydown eventem, doporučuji k pozornosti tento článek. |
||
Misha Profil * |
#11 · Zasláno: 13. 9. 2010, 16:14:21
Witiko:
Díky moc, našel jsem na webu tabulku znaků a tam byla šipka pod jiným číslem. #39 mi již funguje. Ještě mě napadá, na mém webu mám pod každou fotkou také formulář pro komentáře. Takže když někdo píše komentář a chce posunout kurzor o pár znaků dopředu, nebo dozadu, tak se automaticky přesměruje stránka na další (předchozí) fotku. Tím pádem uživatel příjde o psaný komentář. Bylo by možné nějakým způsobem zajistit aby se akce neprovedla pokud je kurzor ve formulářovém poli? |
||
Witiko Profil |
#12 · Zasláno: 13. 9. 2010, 16:46:49 · Upravil/a: Witiko
No, řešil bych to buď nějak takto (neozkoušeno):
/* do globální proměnné element bude uložena reference na dané textové pole */ var element = document.getElementById('...'); document.body.onkeydown = function(e) { if(!e) e = window.event; if(e.target != element && e.srcElement != element) { if(e.keyCode == 37) { /* Doleva akce */ e.returnValue = false; return false; } else if(e.keyCode == 39) { /* Doprava akce */ e.returnValue = false; return false; } else { /* Jiné tlačítko */ return true; } } else { /* Je označený element */ return true; } } Nebo bych jednoduše event nabalil na span uvnitř něhož by se daná textarea nenalézala. |
||
Časová prodleva: 14 let
|
0