@Marooned:
onFocus działa i jest poprawne w HTML-u, ale nie w XHTML-u (i nie w JavaScripcie) i być może dlatego -- jak zauważyłeś -- rzeczywiście uznawane jest za złą praktykę.
W kodzie oprócz tego brakuje paru atrybutów. Część z nich jest nieobowiązkowa w HTML-u 5, ale wątpię, by autor z niego właśnie korzystał. Brakuje czegoś w form, w script....
Generalnie o dziwo dopiero teraz wpadłem na pomysł, że kod może być tylko makietą stworzoną na potrzeby forum, a nie rzeczywistym, przeklejonym kodem z wyciętymi niepotrzebnymi fragmentami :D. Całkiem możliwe, że za bardzo się podjarałem.
Czy uważasz za rozdzielenie zachowania, struktury i prezentacji za "święty puryzm"? Hmm. Cóż... masz prawo. Skoro napisałeś jeszcze, że czepianie się do tego to "czepianie się byle się przyczepić", to sugeruje to, iż uważasz to rozdzielenie za rzecz niepraktyczną / mało istotną (skoro sama w sobie nie ma wystarczającego znaczenia, żeby to odnotować). I do tego masz prawo.
W pewnych warunkach zresztą takie wstawianie kodu w linię jest wydajniejsze. I często, gdy trzeba podpiąć zdarzenia do mniejszej liczby elementów, ilość całkowitego kodu jest sporo mniejsza niż gdyby użyć DOM (który jest koszmarnie niewygodnym, niezgrabnym interfejsem). Z drugiej jednak strony zmniejszenie plików HTML ma spore znaczenie dla szybkości działania strony, bo pliki te przeważnie nie mogą być buforowane przez przeglądarkę, w przeciwieństwie do zewnętrznych skryptów.
Zauważ też proszę, że w tamtym kodzie mamy wstawione w linię nie tylko wywołania funkcji z paroma argumentami, ale również pojawiło się nam... przypisanie do zmiennej globalnej. Czyli po prostu kawałeczki JavaScriptu.
A właśnie. Weź zdebuguj taki kod. Zmienna globalna -- nie wiadomo gdzie jest przypisywana. Przypisania rozsiane są po wielu miejscach kodu HTML. Zmienne globalne bywają źródłem wszelkiego zła! W przypadku małych skryptów często upraszczają ich pisanie i to jest OK, ale gdy na stronie masz tego więcej, robi się problem z utrzymaniem.
Dodatkowo, zauważ proszę, że takie coś przejdzie:
<input ... onclick="klikmieto_przycisk()">
Strona się załaduje bez błędu, mimo że jest tam literówka: klikmieto_przycisk. I teraz pytanie, czy ktoś to przetestuje przed opublikowaniem, czy na stronie będzie wisiał przez parę dni błąd.
Zaś jeśli byłoby coś takiego:
myapp.evt.addOnload(function() {
var przycisk = ...;
myapp.evt.addEventListener(przycisk, 'click', klikmieto_przycisk);
function kliknieto_przycisk() { ... }
});
To interpreter JS wywali błąd od razu przy załadowaniu strony, bo nie ma identyfikatora klikmieto_przycisk.
Więc generalnie gdy masz sporo JavaScriptu to IMHO korzyści z rozdzielenia warstw są jak najbardziej praktyczne i wymierne. Jest jednak możliwe, że w tym wypadku za bardzo się podjarałem. @rav88 zdaje się mieć swój rozum i dobrze; chcę tylko zwrócić uwagę na rzeczy, które powinien sobie sam ocenić. A że niby zastosował moją radę, ale olał coś, co explicite napisałem, to inna sprawa ;).
A tak w ogóle to najfajniej może być, gdy elementy interfejsu mające sens tylko w JavaScripcie tworzysz... w JavaScripcie. Wtedy żadne googleboty czy mobilniacy z powyłączanymi skryptami nie dostają całego tego niepotrzebnego kodu (a pozostali mogą go mieć zcache'owanego!). Wymaga to oczywiście rozdzielenia warstw i jest zgodne z zasadą nieinwazyjnego JavaScriptu. No ale do tego trzeba użyć jakiegoś frameworka -- czy to swojego, czy to dostępnego ogólnie. Bo praca w czystym DOM i z ułomnością IE to prawdziwy ból (nawet w przykładzie powyżej nie mogłem po prostu użyć element.addEventListener, tylko wymyślić naprędce jakieś pseudo-środowisko aplikacyjne).