market.js 3.71 KB
/**
* market application
* Code in 2014/12/4
* By van
*/

define( 'market' ,function( require, exports, module ){

    var market = function( options ){
        this.o = {
            add : 'm-add',
            del : 'm-del',
            sel : 'm-selected',
            input : 'i-selected',
            html : null,
            content : 'region-hide'
        };

        this.o = $.extend( this.o, options );
        this.target = _name( this.o.add );

        this.init();
    };
    market.prototype = {
        init: function(){
            /*
             * 运行事件绑定器
             */
            this.makeSel();
            this.eventListener();
        },
        eventListener: function(){
            /*
             * 为所需元素绑定事件
             */
            var _this = this, 
                data, 
                number,
                arr = [];

            //添加事件
            this.target.live({
                click: function(){
                    var ipt = $(this).parent().find( "."+ _this.o.content );

                    if ( ipt.length ){
                        data = ipt.attr( "value" ).replace( /^\s+/, '' )
                                                .split( /[\/\s]+/ );
                        number = data.pop();

                        if (_index( arr, number )){
                            $(this).parent().after( _this.makeHtml( data.join(" 〉") ) );
                        };
                    }
                }
            });
            //添加元素移入事件
            _name( this.o.sel ).live({
                mouseenter: function(){
                    _this.hide( _name(_this.o.del) );
                    _this.show( $(this).find( "."+ _this.o.del ) );
                }
            });
            //删除元素事件
            _name( this.o.del ).live({
                click: function(){
                    $(this).prev().mouseenter = null;
                    $(this).click = null;
                    arr.pop( number );
                    $(this).parent().remove();
                }
            });

        },
        makeHtml: function( a ){
            /*
             * 返回添加元素HTML结构
             */
            var _this = this,
                html = '<div class="'+ this.o.sel + '"><div>'+ a
                        + '</div> <span class="' + this.o.del + '">删除'
                        + '</span> <input type="hidden" class="' + this.o.input 
                        + '" value="'+ a +'"/></div>';
            
            return $(_this.o.html).length ? $(_this.o.html) : $(html);
        },
        show: function( del ){
            /*
             * 显示删除按钮
             */
            $( del ).css({ visibility: "visible" });
        },
        hide: function( del ){
            /*
             * 隐藏删除按钮
             */
            $( del ).css({ visibility: "hidden" });
        },
        makeSel: function(){
            /*
             * 初始化一个m-selected元素
             */
            
            $("body").append( 
                $('<div class="'+ this.o.sel +'"><span class="'+ this.o.del +'"></span></div>') 
            );
        }
    }

    function _name( n ){
        //优先返回class jquery对象
        return $( "."+ n ).length ? $("."+ n) : $("#"+ n);
    };
    function _index( arr, elem ){
        /*
         * 判断elem是否在数组arr中
         * 如果不存在其中则添加到arr中
         * 否则返回布尔值false。
         */
        var each, counter = 0;

        for ( each in arr ){
            if ( arr[each] === elem ){ ++counter; }
        };
        if ( counter === 0 ){ arr.push( elem ); return true; };

        return false;
    };

    return market;
});