středa 4. února 2015

Které tlačítko odeslalo formulář?

Potřebujeme-li hlídat pomocí JavaScriptu, konkrétně pomocí jQuery, odeslání formuláře, navěsíme se buďto na odesílací tlačítko pomocí .click() nebo na odeslání formuláře pomocí .submit(). Ve druhém případě ale nevíme, které tlačítko (či jiný element) formulář odeslalo. A to někdy vědět potřebujeme.

Jedna klička je označit tlačítko při jeho stisknutí pomocí .click() a pak v obsluze .submit() se na to spolehnout:
Zajímavější metoda mi přijde ale postup Intercept a form submit with jQuery and prevent or allow submission, odkazovaný v jedné z odpovědí v jquery - Detect which submit button was clicked - Stack Overflow: skutečně zjistit, který prvek formulář odeslal.

V komentáři je pak podstatné upřesnění pro zachování cross-browser kompatibility:

/* Look for the originating object for: firefox, others
(opera, chrome -not tested, ...), IE
Not working for, at least, konqueror. Safari not tested. */
var submitted =
e.originalEvent.explicitOriginalTarget ||
e.originalEvent.relatedTarget ||
document.activeElement;

/* Look if it was a text node (IE bug) */
submitted = submitted.nodeType == 1 ?
submitted :
submitted.parentNode;


Řešení sice není zcela spolehlivé, při odeslání formuláře "enterem" dostanete dokonce v různých prohlížečích různé výsledky, ale v mnoha případech to je to, co potřebujete. Jako zrovna teď já ;-)

MAKE Magazine

Technology Review RSS Feeds

Nejčtenější příspěvky