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.