Autor Zpráva
Karolíneček
Profil *
Může mi někdo poradit jak rozchodit toto na mobilu s Android 7 (chrome)???

<input onkeydown="var ch=window.event||e; if(ch.keyCode==8 && this.value==''){mojefunkce()};" ... >

Nedokážu za žádnou cenu detekovat zmáčknutí zmíněné klávesy na virtuální klávesnici mobilu při psaní v <input>.... a následné odpálení mé JS funkce ...

Na všem desktopech (PC prohlížečích) to jede ok.

googlím celý den a je to marné, je to marné ... :-(
Poradí někdo díky?


mělo to být v code, omluva:

<input onkeydown="var ch=window.event||e; if(ch.keyCode==8 && this.value==''){mojefunkce()};" ... >
Karolíneček
Profil *
Toužím po sebevzdělání a tak můj dotaz rozšířím, všeobecně jaké Javascriptem odchytnutelné události vyvolává jednoduché stisknutí na androidí virtuální klávesnici v prostředí mé HTML stánky?

Běžné JS "klávesnicové" události (onkeyup, onkeydown apod) to asi nebudou?
blaaablaaa
Profil
Karolíneček:
Takže onkeydown se vůbec nezavolá? Nebo vrátí jiný keycode (229)?
Karolíneček
Profil *
blaaablaaa:
Tak jsem vyzkoušel "alertovat" a máš pravdu, hází to pořád 229, nechápu tedy přes jaké události přebírá můj HTML input v prostředí dotykových přístrojů hodnotu stisku té soft-klávesnice, když to není přes keyCode....? Jak jednoduše to JavaScriptem odchytit?

<input onkeydown="var ch=window.event||e; alert(ch.keyCode);" type="text">
blaaablaaa
Profil
Karolíneček:
Je to kvůli bufferu (při keydown ještě nění jasné, co uživatel zmáčkl), co se stane, když to pověsíš na keyup? Resp. proč je potřeba odchytávat prázdná string po backspace? Nebylo by lepší to dát spíš na oninput, který zachytí změnu (tzn. i když uživatel text např. vyjme přes schránku apod.)?
Karolíneček
Profil *
blaaablaaa:
Díky za tip, ale je to "blázinec", i onkeyup podává údaj '229'. Pokud to dobře chápu po události onkeyup už nic "nenásleduje", takže nechápu jak ten můj input pochopí správně zmačknutá písmena .... když pak javascript to neumí správně odchytit?

Dokáže mne někdo vysvětlit jak to v dotykovém prostředí vlastně funguje oproti klasickým desktopovým prohlížečům, a má to jednoduché řešení?

Testuju na Android 7, mob. Chrome posl. verze
blaaablaaa
Profil
Karolíneček:
Bohužel je to vlastnost. Asi ani při onkeyup ještě nemusí být jasné, co se na vstup pošle (autocorrect apod.). Lze při keydown uložit obsah inputu a při keyup ho porovnat a zjistit tak rozdíl.

Pořád ale nevím, jaké má být funkčnost toho skriptu, třeba to půjde vymyslet jinak/lépe.
Karolíneček
Profil *
vymyslet (překopat) můj skript "jinak" to určitě půjde, ale můj "sen" je nyní pochopit a naučit se jak ty události v dotykovém prostředí vlastně fungují a co na pozadí předá inputu informaci o tom co má zobrazit, to přece musí jít javascriptem v androidu odychtit, vždyť je to naprosto banální požadavek ....
blaaablaaa
Profil
Karolíneček:
"229 on keyup and keydown indicates the keyboard buffer is busy. The reason - when you press a key - the input is still not guaranteed to be what the user pressed, because of auto suggest and other events that may follow immediately and invalidate the event. "
Karolíneček
Profil *
blaaablaaa:
díky ale to jsem se nikam neposunul, zatím vím že při události keydown, keypress a keyup je u všech buffer "plný", a javascript hlásí furt 229 a neumím se dostat k tomu co umí přijmout tag input, ten vše chápe a zapisuje/zobrazuje ok .... Hlava mne to nebere jak donutit chytrý javascript aby byl stejně "chytrý" jako ten input :-))), když to napíšu laicky
.... sorry nejsem odborník a jen se chci něčemu naučit ;-) a furt tuším že detekovat např. stisk "backspace" na mobilu musí nějak jít ......
blaaablaaa
Profil
Karolíneček:
Nejde. Jak jsem psal výše, je to vlastnost na androidím chrome. Dá se porovnat stav před a po stisknutí a zjistit tak vymazání znaku.
Keeehi
Profil
Karolíneček:
Když by jsi chtěl detekovat změnu toho políčka tak bych použil onchange.
blaaablaaa
Profil
Keeehi:
Spíš oninput, onchange se zavolá až po ztrátě focusu, ale pořád nevím, čeho se snaží docílit.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0