Zdarzenie rozmycia zostało uruchomione po ustawieniu ostrości

Używam następującego kodujsFiddle:

function Field(args) {
    this.id = args.id;

    this.name = args.name ? args.name : null;
    this.reqType = args.reqType ? args.reqType : null;
    this.reqUrl = args.reqUrl ? args.reqUrl : null;
    this.required = args.required ? true : false;
    this.error = args.error ? args.error : null;

    this.elem = document.getElementById(this.id);
    this.value = this.elem.value;

    this.elem.addEventListener('blur', this, false);
    this.elem.addEventListener('focus', this, false);
}

// FormTitle is the specific field like a text field. There could be many of them.
function FormTitle(args) {
    Field.call(this, args);
}

Field.prototype.getValue = function() { return Helpers.trim( this.value ) };

Field.prototype.blur = function (value) {
    alert("blur");  
};

Field.prototype.focus = function (value) {
    alert("focus");  
};

Field.prototype.handleEvent = function(event) {
    var prop = event.type;
    if ((prop in this) && typeof this[prop] == "function")
        this[prop](this.value);
};

inheritPrototype(FormTitle, Field);
var title = new FormTitle({name: "sa", id: "title"});

function inheritPrototype(e, t) {
    var n = Object.create(t.prototype);
    n.constructor = e;
    e.prototype = n
}

if (!Object.create) {
    Object.create = function (e) {
        function t() {}
        if (arguments.length > 1) {
            throw new Error("Object.create implementation only accepts the first parameter.")
        }
        t.prototype = e;
        return new t
   }
}

Problem polega na tym, że zdarzenie „rozmycia” jest uruchamiane za każdym razem, gdy pole jest skupione, co jest przeciwieństwem tego, czego można się spodziewać. Dzieje się tak pomimo faktu, że zdarzenie focus nie jest nawet wymienione w kodzie. Problem polega na tym, że nie mogę replikować tego problemu w jsFiddle, ale problem występuje w IE.

Również na jsFiddle istnieje inny problem. Zdarzenie fokusowe jest uruchamiane wiele razy ...

Czy jest możliwe wyjaśnienie tego i / lub rozwiązania?

Zaktualizowano:

Pytanie bonusowe (i na koniec, obietnica). Dodałem funkcję addEvent, aby dynamicznie dodawać zdarzenia do pól, zamiast dodawać je bezpośrednio w konstruktorze nadrzędnym. To jestjsFiddle dla tego. Próbuję wywołać funkcję, ale nie działa. Co mogę zrobić źle?

questionAnswers(1)

yourAnswerToTheQuestion