Archiv rubriky: Chyby

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. Pokračování textu Pomoc! Nefunguje focus()

Jak správně debugovat JavaScript?

Debugovat JavaScript většinou není problém – spustíte Nástroje pro vývojáře, Inspektor, Firebug, F12, apod. a nastavíte break-point (nebo prostě do kódu napíšete „debugger„).

Někdy ale narazíte na speciální situace, kdy není možné debugger použít (např. na mobilu, chytré televizi, apod.) nebo se debugger nechová přesně tak, jak byste očekávali.

Poznámka: následující ukázky kódu se mohou zdát nelogické, špatně navržené či dokonce chybné – ale o to přeci jde. Kdyby byl každý kód dokonale navržený a bezchybný, nebylo by ho potřeba debugovat!

Metody debugování

  1. Nejčastějším způsobem debugování javascriptu je již zmíněné vytvoření break-pointu nebo příkazu debugger, které je nejvhodnější, pokud potřebujete kód krokovat nebo se podívat na obsah nějakých proměnných v daném okamžiku.
  2. Další možností je zápis do konzole, které se hodí, pokud přímo nepotřebujete kód zastavit (nebo je to přímo nežádoucí), ale potřebujete se dozvědět o nějaké události nebo o obsahu nějaké proměnné. Moderní RIA (Rich Internet Applications) mohou do logu konzole zapisovat stejně často jako desktopové programy nebo mobilní aplikace.
  3. Třetí často používanou metodou je zobrazení alertu, které se dost podobá „brute force“ a používá se v okamžiku, kdy všechny ostatní metody selhávají a vy se potřebujete dozvědět, že došlo k nějaké události (nebo naopak nedošlo v důsledku v chyby v kódu).

Pokračování textu Jak správně debugovat JavaScript?

„Too much recursion“ při odesílání formuláře

Pokud narazíte na chybu „Too much recursion“ (a nebo prostě prohlížeč spadne) při odesílání formuláře, podívejte se po metodě, která odesílání zajišťuje.

Na první pohled nemusí být nic zřejmé:

//...
window.checkValid = function(form) {
    form = $(form);
    if (form.validate()) {
        form.submit();
    }
}

Při kliknutí zkontrolujete validitu formuláře a pokud je validní, formulář odešlete. Celkem běžný postup.

Problém ale spočívá v tom, že jQuery methoda $(form).submit() neodesílá formulář, nýbrž vytváří událost submit (podobně jako metoda $(button).click() vytvoří událost click) a tudíž dojde k zavolání methody onsubmit – která pak znovu a znovu vytváří událost submit a zacyklí se. Pokračování textu „Too much recursion“ při odesílání formuláře