Autor Zpráva
lamatér
Profil *
potřboval jsem zjisti ascii kódy kurzorových šipek, tak jsem si na to udělal takový script:
<body onkeydown="alert(event.keyCode)">

a nějak mi to pořád hlásí kódy 37 - 40
javascript, který má nějaku událost na šipky s těmito čísly funguje, ale taky se znaky, které mají ascii 37-40
tedy script vyhodnotí stejně stisk šipky vlevo jako znaku %,
což je pěkný psycho... jak můžu přesně rozeznat šipky, aby to stejně nereagovalo i na některé znaky?
Chamurappi
Profil
Reaguji na lamatéra:
tedy script vyhodnotí stejně stisk šipky vlevo jako znaku %
Zkoušels to? Vlastnost event.keyCode vrací (minimálně u onkeydown a onkeyup) kód klávesy, nikoliv kód znaku. Je tedy i nezávislá na nastaveném rozložení klávesnice (měla by být).

Jakou jednou klávesou napíšeš znak procenta? Šipkou doleva ne.
peta
Profil
lamatér
http://www.volny.cz/peter.mlich/hry/hry.htm

viz Chamurappi Zkousel jsi to? Zkus to. :)
Kod klavesy je jeden pro keydown a jiny pro keyup. Je mozne, ze tvuj nejmenovany prohlizec toto nerozlisuje.
Kod klavesu je tez jiny, pokud pouzijes sipky na sipkach a sipky na key-pad, coz je ten ciselnik vpravo na normalni klavesnici.
Dale je mozne keypad prepinat rezimem num-lock na numerickou cili ciselnou klavesnici nebo na klavesnici s sipkami.
Cili v tomhle pripade tvoje sipka vlevo muze obsahovat i 6 ruznych kodu klaves. Otazka je, jestli ty chces vsechny tyto kody vyuzit.
Vetsinou se to porovnava:
if (k==12 || k==34 || k==56) {smer='vlevo';}
a nebo se pouziva pole cisel a neco typu in_array (obdoba PHP)
if (in_array(k,[12,34,56])) {...}
Jestli chces ascii znak, pak se podivej na
jakpsatweb - javascript - objekt string
lamatér
Profil *
No jo, dívám se, že ASCII kód není to samé, jako kód klávesy, který dostanu na onkeydown / onkeyup
ale jinak jsem to zkoušel to jako jo a pořád mi kódy šipek na
event.keyCode (v IE) a event.charCode (ve FF) sedí na 37-40 tak to prostě funguje
a to samé jako na šipky to dělá i na znaky s ASCII 37-40 (z toho jsem nabyl nesprávného dojmu, že kód klávesy je stejný jako ASCII kód)
prostě na input mám hozený onkeypress="funkce(event)"
a potom:
funkce(e) {
if (e.keyCode == 37) alert("IE");
if (e.charCode == 37) alert ("FF");
}

a taková funkce pak reaguje steně na šipku doleva jako na znak %
jinak numerickou klávesnici zkusit nemůžu... žádnou tu bohužel nemám.
peta
Profil
lamatér
jaky mas teda problem?
zapis te funkce mas spatne.
google.com javascript crossbrowser event
lamatér
Profil *
Chtěl bych nějak rozeznat tu šipku doleva od zanku %
(ten js jsem dal jsen tak z hlavy, taková ukázka)
Chamurappi
Profil
Reaguji na lamatéra:
prostě na input mám hozený onkeypress="funkce(event)"
To je onkeypress, u něj v Exploreru funguje event.keyCode tak, jako jinde funguje event.charCode. Ptal ses na onkeydown. Pokud vím, tak v Exploreru stejně přes onkeypress nejdou šipky zachytit, takže opět žádný konflikt nehrozí.

Chtěl bych nějak rozeznat tu šipku doleva od zanku %
Mohl bys dodat živou ukázku problematické situace? Pořád se domnívám, že nemůže nastat.


Reaguji na petu:
Dale je mozne keypad prepinat rezimem num-lock na numerickou cili ciselnou klavesnici nebo na klavesnici s sipkami
Šipky na numerické klávesnici se pak ale hlásí jako šipky, mají stejný event.keyCode.

Cili v tomhle pripade tvoje sipka vlevo muze obsahovat i 6 ruznych kodu klaves
Nevím, odkud jsi vycucal tak vysoký počet, ale šipka doleva je vždy jen a pouze 37.

zapis te funkce mas spatne
Nemá.
lamatér
Profil *
tak tady je funkční ukázka:
<script type="text/javascript">
/* <![CDATA[ */
function funkce(e) {
if (e.charCode) { a = e.charCode; b = "ff"; } else { a = e.keyCode; b = "ie"; }
if (a < 37 || a > 40) {
if (b=="ff") { e.preventDefault(); } else { e.returnValue=false; }
alert("Tady fungujou jen šipky, nebo o psycho znaky % & ' ( bohužel");
}
}
/* ]]> */
</script>
<form>
<input type="text" onkeypress="funkce(event)" />
</form>

Skutečně problém je jen s firefoxem (a Operou pravděpodobně taky, ale nemohl jsem vyzkoušet)
Má to fungovat tak, že vždy vypíše alert, pokud nejde o kurzorové šipky, jenže problém je v tom, že to bere i znaky % & ' ( jako by šlo o šipky.
DJ Miky
Profil
Zkus nahradit onkeypress za onkeydown.
Chamurappi
Profil
Reaguji na lamatéra:
Hned je to jasnější. Konfliktní situaci si tam vyrábíš sám. Jen a pouze proto, aby ti to nefungovalo, si tam zatahuješ event.charCode.

Když v Mozille zmáčkneš šipku, tak ta má event.charCode roven 0 a event.keyCode roven 37. Když napíšeš procenta, ta mají event.charCode roven 37. Pokud je event.charCode nula (nebo undefined), tak bereš event.keyCode => v obou situacích dostaneš 37.

V Exploreru událost onkeypress na šipky vůbec nereaguje, procházejí bez detekce (stejně jako klávesy Home, End, Backspace atd.), a event.keyCode vrací totéž, co v Mozille vrací event.charCode, proto procenta mají 37.

Doporučuji při skriptování lépe sledovat, co se v prohlížečích doopravdy děje.
peta
Profil
Chamurappi
„zapis te funkce mas spatne“
>> Nemá.
Ma a nehadej se, kdyz necemu nerozumis.

funkce(e) {
if (e.keyCode == 37) alert("IE");
if (e.charCode == 37) alert ("FF");
}

kde ma window.event, aby mu to chodilo v IE6? Nema. Tudiz mu ta funkce nepojede.
Na to by samozrejme dosel, kdyby hledal, co jsem mu poradil. Hold, jestli nekdo poradit nechce...

„Cili v tomhle pripade tvoje sipka vlevo muze obsahovat i 6 ruznych kodu klaves“
>> Nevím, odkud jsi vycucal tak vysoký počet, ale šipka doleva je vždy jen a pouze 37.
... Za predpokladu, ze klavesy s num a bez daji jiny kod. Coz jsem psal, ze si ted nejsem jist.
1 sipka dolu, key down
2 sipka dolu, key up
3 sipka dolu num kl. num on, key down
4 sipka dolu num kl. num on, key up
5 sipka dolu num kl. num off, key down
6 sipka dolu num kl. num off, key up
je to 6? Ale je mozne, ze to dava shodne kody. Stale ale na zacatku je treba pocitat se 6ti nez si to proveri.


lamatér
"jenže problém je v tom, že to bere i znaky % & "
Je to mozne, nemam to overeno. Proto ti rikame, ze to zkus. Podle mne by to ale nemelo nastat. Klavesnice by mela vracet znaky ala ascii tabulka.
Pamatuj ale na to, ze prohlizec ma klavesove zkratky a timto mu je zablokujes. Mnohy uzivatel ti podekuje. Horsi, ze kazdy prohlizec ma jine zkratky.


tady pouzivam detekci kodu klaves, jiste jsem se o tom zminil a melo by to fungovat spravne. Jestli mas chybnou funkci, tak tam ztraci smysl resit %
http://www.volny.cz/peter.mlich/hry/hry.htm
Chamurappi
Profil
Reaguji na petu:
nehadej se, kdyz necemu nerozumis
Pouze upozorňuji na tvé chyby, když tomu nerozumíš.

kde ma window.event, aby mu to chodilo v IE6?
V argumentu „e“, protože tu funkci volá z atributu jako onkeypress="funkce(event)". Ověř si to.

Ale je mozne, ze to dava shodne kody.
Dává. Hned v prvním příspěvku jsem psal, že se v onkeyup a onkeydown používá kód klávesy. Stejný kód. Nedávalo by smysl, aby stisknutí a puštění vracelo jiné číslo.

Pamatuj ale na to, ze prohlizec ma klavesove zkratky a timto mu je zablokujes.
Zkoušel jsi to? Zkus to.

tady pouzivam detekci kodu klaves
Nepoužíváš ji ty, používají ji původní autoři těch her, kteří rozuměli tomu, co dělají. Oni na rozdíl od tebe museli vědět, že onkeydown a onkeyup vrací stejné hodnoty event.keyCode.
lamatér
Profil *
lol
už je to vyřešeno...
moc dík Chamurappi-mu
já totož vůbec nevěděl, že Mozilla má jak keyCode tak charCode
měl jsem prostě za to že keyCode v IE je to samé co charCode v Mozille
díky tomuhle předpokladu bych na to sám asi nikdy nepřišel, takže díky za pomoc.
peta
Profil
Chamurappi
Hadani s tebou postrada smysl :)

„kde ma window.event, aby mu to chodilo v IE6?“
V argumentu „e“, protože tu funkci volá z atributu jako onkeypress="funkce(event)". Ověř si to.
... prehlednuti, je to tak.

„Pamatuj ale na to, ze prohlizec ma klavesove zkratky a timto mu je zablokujes.“
Zkoušel jsi to? Zkus to.

ANO, to jsem zkousel
function xxx()
{
return false; //nebo true
}
Zablokuje jakekoliv dalsi klavesy pri pouziti s onkey udalostmi.


„tady pouzivam detekci kodu klaves“
Nepoužíváš ji ty, používají ji původní autoři těch her, kteří rozuměli tomu, co dělají. Oni na rozdíl od tebe museli vědět, že onkeydown a onkeyup vrací stejné hodnoty event.keyCode.

To se teda hluboce mylis. Hezky si najdi na javascriptkit nebo jaky mam odkaz na zdroj hry a porovnej si zdrojove kody i v oblasti klaves. Dojdes nekdy k dost zasadnim zmenam. Protoze vetsinu tech her jsem upravoval tak, aby chodila v Moz nebo IE, kde pred tim vubec nebezela. Nepopiram, ze zbytek kodu muze byt ve sve puvodni podobe. Neshledal jsem duvod, proc do nej vrtat.

lamatér
Dobre ti tak, ze jsi na to prisel az ted. Odkaz jsem ti dal na hry uz ve druhem prispevku.
Soucasne jsem te odkazal na google na crossbrowser eventy.
Zrejme radeji travis cas na foru. Tak to potom jo :)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: