addEventListener für ein benutzerdefiniertes Objekt

Ich habe ein Objekt erstellt, der verschiedene Methoden. Einige dieser Methoden sind asynchron und somit will ich mithilfe von Ereignissen können perfom Aktionen, wenn die Methoden fertig sind. Um dies zu tun ich habe versucht, fügen Sie die addEventListener () auf das Objekt.

jsfiddle

var iSubmit = {
    addEventListener: document.addEventListener || document.attachEvent,
    dispatchEvent: document.dispatchEvent,
    fireEvent: document.fireEvent,   


    //the method below is added for completeness, but is not causing the problem.

    test: function(memo) {
        var name = "test";
        var event;
        if (document.createEvent) {
            event = document.createEvent("HTMLEvents");
            event.initEvent(name, true, true);
        } else {
            event = document.createEventObject();
            event.eventType = name;
        }
        event.eventName = name;
        event.memo = memo || { };

        if (document.createEvent) {
            try {
                document.dispatchEvent(event);
            } catch (ex) {
                iAlert.debug(ex, 'iPushError');
            }
        } else {
            document.fireEvent("on" + event.eventType, event);
        }
    }
}

iSubmit.addEventListener("test", function(e) { console.log(e); }, false);


//This call is added to have a complete test. The errors is already triggered with the line before this one.

iSubmit.test();

Dieser gibt einen Fehler zurück: Failed to add eventlisterens: TypeError: 'addEventListener' called on an object that does not implement interface EventTarget."

Nun dieser code wird verwendet in einer phonegap-app und wenn ich das mache, funktioniert es auf android/ios. Während der Tests allerdings wäre es schön, wenn ich könnte es funktionieren, die in mindestens einem einzigen browser.

PS> ich weiß, ich könnte aktivieren sprudelt, und dann hören Sie den document root, aber ich hätte gerne nur ein bisschen OOP, wo jedes Objekt kann sich auf seine eigenen.

InformationsquelleAutor der Frage Hugo Delsing | 2013-12-30

Schreibe einen Kommentar