Sziasztok.
Van egy bonyolult formom amin rengeteg beviteli mező van, és szeretnék hotkeyeket létrehozni. Pl. ha megnyomja bárhol az "a" betűt akkor csináljon valamit pl. nyisson meg egy dialógus ablakot. Csak ugye azzal van a gond ha egy input mezőn áll, és abba begépeli az "alma" szót, akkor ott megnyomja az "a" betűt és elpattan az esemény, amely megnyitja a dialógus ablakot. Ezt le tudtam kezelni a lentebbi kódrésszel, hogy figyelem, hogy mi az aktív elem és ha az valamelyik input mező, akkor azt kihagyom. Csak akkor van gond ha bekerül újabb input mező és elfelejtjük lekezelni.
$(document).ready(function () {
$(window).keydown(function (e) {
if (document.activeElement.id != 'input1' && document.activeElement.id != 'input2') { ...} ...
Van erre valami jó módszer amivel ezt elegánsan meg lehet oldani?
- 728 megtekintés
Hozzászólások
inputokra rátolod ezt: https://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation
vagy
document.activeElement.tagName != "INPUT"
- A hozzászóláshoz be kell jelentkezni
Hivatalosan a stopPropagation lenne a megoldás, de ugye azt az inputmezőre kéne rátenned.
Javascriptben az épp interaktált elem szépen feladja az eventet a szülőjének, egészen a window objektumig (sőt, browserig), ha nincs mondva neki stopPropagation (vagy régimódin míg az eseménykezelő nem tér vissza false-szal)
Szóval ezt rátehetnéd minden inputmezőre egyesével, de sokkal egyszerűbb lenne, ha ráraknál egy class-t az inputmezőkre ahol ezt le akarod tiltani, és a fenti kódod hasClass - szal vizsgálná az elemet, vagy egyszerűen element.nodeName == input && element.type== text és kész vagy szinte (kell még textarea meg password, meg esetleg contentEditable).
Namost az már más kérdés, hogy ha valami tele van input mezőkkel, méghozzá annyival hogy előre azt se tudod, mennyi lesz, akkor miért akarsz te közönséges karaktereket lefoglalni parancsgombnak, access key (ctrl, alt) nélkül. A gmailben ez azért működik, mert az egy db keresőn kívül nincs benne inputmező.
Nagyon nagy az esélye ugyanis, hogy a felhasználó pont egy inputmezőn áll, ezért nem működik a billentyűzetvezérlésed.
- A hozzászóláshoz be kell jelentkezni