Křížový způsob, jak zjistit, zda byla událost DOM zrušena

Existuje způsob, jakým lze z obslužné rutiny události Javascript zjistit, zda událost byla zrušena předchozí obslužnou rutinou? IE a další prohlížeče jako Chrome atd. mají event.returnValue vlastnost, kterou lze testovat, ale zdá se, že FireFox žádnou takovou vlastnost nemá.

Zde je příklad scénáře, o kterém mluvím. Máte podobný formulář:

<form id="test" name="test" onsubmit="return false;" />

A připojíte k němu událost v Javascriptu pomocí addEventListener /attachEvent (pro stručnost vynecháno připojení). Událost potřebuje vědět, zda něco předcházejícího v řetězci vrátilo false nebo ji jinak zrušilo. Verze IE je taková:

function onSubmitHandler(e) {
    alert("event was cancelled prior to this handler: " + e.returnValue);
}

Toto funguje v IE, Chrome atd., ale samozřejmě ne ve FireFox, protože nemá event.returnValue . Hledal jsem na interwebech jiný způsob, jak to určit ve FireFoxu, a na nic jsem nepřišel. Existuje řešení tohoto problému, které nezahrnuje nastavení onsubmit atribut formuláře přímo?

Odpověď

Tady je to kludge způsob, jak to obejít. Doufal jsem v čistou metodu vyhovující standardům, ale zdá se, že žádná neexistuje.

function onSubmitHandler()
{
    // only called if the other onsubmit handlers succeed
}

// hook in submit
var originalOnSubmit = form.onsubmit;

form.onsubmit = function(e)
{
    var ret;

    if (originalOnSubmit)
        ret = originalOnSubmit();

    if (ret != false)
    {
        return onSubmitHandler(e);
    }
};