bootstrap.select.js
2.83 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
132
133
134
135
136
137
138
139
/**
* 显示一个下拉框
* 作者:黄平
* 日期:2016-05-14
*/
(function($) {
$.fn.select = function(options, param) {
var self = this;
if (typeof (options) == "string") {
var method = $.fn.select.methods[options];
if (method){
return method.call(this, param);
}
}
return this.each(function() {
var opt = $.extend({}, $.fn.select.defaults, options);
self.data("select", opt);
if (opt.url) {
$.ajax({
url : opt.url,
data : opt.queryParams,
type : opt.method,
dataType : opt.dataType ? opt.dataType : "json",
success : function(data) {
if (!data) {
return;
}
opt.data = data;
if (opt.loadFilter) {
opt.data = opt.loadFilter(data);
}
_createSelect(self);
}
});
} else {
_createSelect(self);
}
});
};
/**
* 生成select
*/
function _createSelect(jq) {
var opt = jq.data("select");
if (opt.style) {
jq.css(opt.style);
}
if (opt.className) {
jq.addClass(opt.className);
}
/*if (!opt.data) {
return;
}*/
if (opt.onChange) {
jq.change(function() {
var optionData = jq.find("option[value='"+ jq.val() +"']").data("optionData");
opt.onChange.call(jq, jq.val(), optionData);
});
}
if (opt.firstText !== undefined || opt.firstValue !== undefined) {
$("<option>").val(opt.firstValue).html(opt.firstText).appendTo(jq);
}
$(opt.data).each(function(index, item) {
$("<option "+ ((opt.value && opt.value == item[opt.valueField]) ? "selected" : "") +">").data("optionData", item).val(item[opt.valueField]).html(item[opt.textField]).appendTo(jq);
});
if (opt.onLoadSuccess) {
opt.onLoadSuccess.call(jq, opt.data);
}
//设置已经加载完成
jq.attr("loadStatus", "1");
}
function _getValue(jq) {
return $(jq).val();
}
function _getText(jq) {
var obj = $(jq).find("option:selected");
return obj ? obj.html() : "";
}
//方法
$.fn.select.methods = $.extend({}, $.fn.validate.methods, {
/**
* 获取值
*/
getValue : function() {
return _getValue(this);
},
/**
* 获取文本
*/
getText : function() {
return _getText(this);
}
});
//事件
$.fn.select.event = $.extend({}, $.fn.validate.event, {
/**
* 加载完成执行
* @param data
*/
onLoadSuccess : function(data) {
},
/**
* 当下拉框改变的时候执行
* @param value
* @param optionData
*/
onChange : function(value, optionData) {}
});
//属性
$.fn.select.defaults = $.extend({}, $.fn.select.event, $.fn.validate.defaults, {
firstText : undefined,
firstValue : undefined,
style : null,
className : "",
valueField : "value",
textField : "text",
url : undefined,
dataType : "json",
type : "POST",
queryParams : {},
data : [],
loadFilter : function(data) {},
value : null
});
/**
其中data包含的属性有
*/
})(jQuery);