Jednou ze sladkých částí ve zjednodušené specifikaci HTML5 bylo povolení A
prvky k zalomení DIV
s a další prvky na úrovni bloku. Příliš dlouho jsme přidávali posluchače JavaScriptu a window.location
přesměruje při zabalení A
by asi stačilo. Jsou však také případy, kdy je obal A
by nefungovalo – například blok s A
prvky, které jsou již v něm obsaženy – chcete jen, aby kliknutí na cokoli jiného v rámci nadřazeného prvku přistála na daném místě.
Samozřejmě by fungoval takový základní posluchač:
someElement.addEventListener('click', function(e) { // not important what the URL is but assume it's available on // the element in a `data-src` attribute window.location = someElement.get('data-url'); });
...ale podlehlo by jednomu z mých největších mazlíků: COMMAND+CLICK
vytvoření bloku a otevření odkazu ve stejném okně. Čím blíže můžeme vlastní kódované bloky přiblížit nativním funkcím prohlížeče, tím lépe. Udělejte si tedy chvilku a opravte zpětná volání posluchače událostí:
someElement.addEventListener('click', function(e) { var url = someElement.get('data-url'); if(e.metaKey || e.ctrlKey || e.button === 1) { window.open(url); } else { window.location = url; } });
Implementoval jsem to na svůj blog a mám to na paměti pokaždé, když použiji window.location
přesměrovat. Je to minimální přírůstek kódu, ale zásadní zlepšení použitelnosti!