Edit in JSFiddle

// 이벤트 할당
function on(elem, type, arg1, arg2) {

    elem = elem || document;
    type = typeof type === 'string' && type || '';

    var handler;
    handler = arg1 = typeof arg1 === 'string' ? arg1 : typeof arg1 === 'function' ? arg1 : null;
    if (arg2) handler = arg2 || function () { };

    bind(elem, type, function (e) {

        handler.call(elem, e);

        // 할당된 Tag Element를 감시하고 해당 이벤트를 할당한다.
        var elems = elem.getElementsByTagName(arg1);

        for (var i = 0, length = elems.length; i < length; i++) {

            if (elems[i].isbind === undefined) {
                bind(elems[i], type, function (e) {
                    handler.call(elem, e);
                    // bubbling stop
                    stopPropagation(e);
                }, false);

                elems[i].isbind = true;
            }
        }
        
        // bubbling stop
        stopPropagation(e);

    }, false);

    return elem;
};