market.js
3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/**
* 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;
});