Como imitar o comportamento de stopImmediatePropagation () (sem usar jquery)

Estou trabalhando no código de manipulação de eventos para uma biblioteca Javascript e estou tentando implementar algo semelhante ao stopImmediatePropagation () que também funcionará no IE 6.

A maneira como a entrega de eventos funciona atualmente é que nosso código de entrega de eventos é registrado com o objeto e, em seguida, os usuários registram todos os seus eventos com nossos manipuladores de evento

A primeira maneira que tentei emular stopImmediatePropagation () foi simplesmente adicionar esse método ao evento, se ele ainda não existisse:

if (event != null && event.isImmediatePropagationEnabled == null) {
    event.stopImmediatePropagation = function () {
        this.isImmediatePropagationEnabled = false;
    };
    event.isImmediatePropagationEnabled = true;
    event.isImmediatePropagationStopped = function () {
        return !this.isImmediatePropagationEnabled;
    };
}

Quando os retornos de chamada do manipulador de eventos dos usuários são chamados, eles são transmitidos no mesmo objeto de evento que obtemos. Eles podem chamar stopImmediatePropagation () no evento, se desejarem.

Como estamos percorrendo todos os retornos de chamada de manipulação de eventos registrados conosco, verificamos o booleano de propagação sempre:

given some event
for [all the callbacks] {
    if (event != null &&
        event.isImmediatePropagationStopped != null &&
        event.isImmediatePropagationStopped()) {
        stopPropagation = true;
        break;
    }

    execute the callback, passing in the event
}

Isso funciona muito bem em alguns navegadores. Como o evento persiste, mesmo depois que nosso código de manipulação de eventos termina e o evento borbulha até o próximo elemento, uma vez que nosso código de manipulação de eventos é atingido novamente, a propriedade isImmediatePropagationStopped ainda existe e, portanto, não são executados mais retornos de chamada (registrados conosco) .

No Internet Explorer (mesmo no 8), isso não funciona. No mesmo elemento, tudo está bem; mas, quando o evento borbulha, parece que um objeto de evento totalmente novo é gerado e perdemos a propriedade isImmediatePropagationStopped. Isso significa que não podemos verificar se o usuário desativou a propagaçã

Então, minha pergunta é: alguém tem alguma idéia de como fazer isso? Eu sei que jquery gerencia um feito semelhante http: //bugs.jquery.com/ticket/335), mas o fazem da mesma maneira - armazenando-o em dados extras para o objeto. O que não sei é como a não persistência do objeto não os machuca, como a mim. (E por várias razões, usar o próprio jquery não é uma opção aqui)

Se alguém tiver alguma ideia - seja por saber mais sobre Javascript do que eu, ou porque eles possam pensar em uma maneira legal de fazer isso - eu aprecio muito. Obrigado

questionAnswers(1)

yourAnswerToTheQuestion