Pomoc! Nefunguje focus()

Běžná situace – potřebujete po načtení stránky najet do formuláře, který je na jejím konci a dát kurzor do prvního inputu.

Celkem snadno vyzkoumáte, že k obojímu slouží funkce focus(), která předá kurzor do daného elementu a navíc na něj naskroluje, pokud je potřeba:

$(default_el).focus();

Zdánlivě vše funguje bez problémů až do chvíle, kdy se prohlížeč rozhodne, že z neznámého důvodu nebude na daný prvek skrolovat.

Sice neznám důvod, proč se to děje (možná prohlížeč sám odhadne, kam umístit kurzor?), nicméně oprava je jednoduchá. Problém je totiž v tom, že v okamžiku, kdy voláte funkce focus(), je již kurzor v daném prvku a tak funkce nic neprovede, protože má pocit, že není potřeba přesouvat kurzor, protože je už tam, kde má být – a tak ani neposune oknem, aby byl prvek vidět.

Oprava tedy spočívá v tom, sebrat nejprve prvku kurzor, abyste ho tam pak mohli opět nastavit (zní to sice podivně, ale funguje to):

$(default_el).blur().focus();

A to je celé.

Ještě poznámka na konec: nezapomeňte, že v okamžiku, kdy kliknete do debuggeru, focus se ztratí z okna prohlížeče a tak veškeré odlaďování těchto metod nemá moc smysl.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..