84 lines
5.0 KiB
JavaScript
84 lines
5.0 KiB
JavaScript
/*!
|
|||
|
|
* jQuery cxSelect
|
||
|
|
* @name jquery.cxselect.js
|
||
|
|
* @version 1.3.4
|
||
|
|
* #date 2013-12-18
|
||
|
|
* @author ciaoca
|
||
|
|
* @email ciaoca@gmail.com
|
||
|
|
* @site https://github.com/ciaoca/cxSelect
|
||
|
|
* @license Released under the MIT license
|
||
|
|
*/
|
||
|
|
! function(a) {
|
||
|
|
"function" == typeof define && define.amd ? define(["jquery"], a) : a(jQuery)
|
||
|
|
}(function(a) {
|
||
|
|
a.cxSelect = function(b) {
|
||
|
|
var c, h, i, d = {
|
||
|
|
dom: {},
|
||
|
|
api: {}
|
||
|
|
},
|
||
|
|
e = function(a) {
|
||
|
|
return a && ("function" == typeof HTMLElement || "object" == typeof HTMLElement) && a instanceof HTMLElement ? !0 : a && a.nodeType && 1 === a.nodeType ? !0 : !1
|
||
|
|
},
|
||
|
|
f = function(a) {
|
||
|
|
return a && a.length && ("function" == typeof jQuery || "object" == typeof jQuery) && a instanceof jQuery ? !0 : !1
|
||
|
|
},
|
||
|
|
g = function(a) {
|
||
|
|
return Array.isArray ? Array.isArray(a) : "[object Array]" === Object.prototype.toString.call(a)
|
||
|
|
};
|
||
|
|
for (h = 0, i = arguments.length; i > h; h++) f(arguments[h]) ? c = arguments[h] : e(arguments[h]) ? c = a(arguments[h]) : "object" == typeof arguments[h] && (b = arguments[h]);
|
||
|
|
if (!(c.length < 1)) return d.init = function() {
|
||
|
|
var e, d = this;
|
||
|
|
if (d.dom.box = c, d.settings = a.extend({}, a.cxSelect.defaults, b, {
|
||
|
|
url: d.dom.box.data("url"),
|
||
|
|
nodata: d.dom.box.data("nodata"),
|
||
|
|
required: d.dom.box.data("required"),
|
||
|
|
firstTitle: d.dom.box.data("firstTitle"),
|
||
|
|
firstValue: d.dom.box.data("firstValue")
|
||
|
|
}), d.settings.selects.length) {
|
||
|
|
for (d.selectArray = [], d.selectSum = d.settings.selects.length, e = 0; e < d.selectSum && d.dom.box.find("select." + d.settings.selects[e]); e++) d.selectArray.push(d.dom.box.find("select." + d.settings.selects[e]));
|
||
|
|
d.selectSum = d.selectArray.length, d.selectSum && ("string" == typeof d.settings.url ? a.getJSON(d.settings.url, function(a) {
|
||
|
|
d.dataJson = a, d.buildContent()
|
||
|
|
}) : "object" == typeof d.settings.url && (d.dataJson = d.settings.url, d.buildContent()))
|
||
|
|
}
|
||
|
|
}, d.getIndex = function(a) {
|
||
|
|
return this.settings.required ? a : a - 1
|
||
|
|
}, d.getNewOptions = function(b, c) {
|
||
|
|
var d, e, f, g, h;
|
||
|
|
if (b) return d = this.settings.firstTitle, e = this.settings.firstValue, f = b.data("firstTitle"), g = b.data("firstValue"), h = "", ("string" == typeof f || "number" == typeof f || "boolean" == typeof f) && (d = f.toString()), ("string" == typeof g || "number" == typeof g || "boolean" == typeof g) && (e = g.toString()), this.settings.required || (h = '<option value="' + e + '">' + d + "</option>"), a.each(c, function(a, b) {
|
||
|
|
h += "string" == typeof b.v || "number" == typeof b.v || "boolean" == typeof b.v ? '<option value="' + b.v + '">' + b.n + "</option>" : '<option value="' + b.n + '">' + b.n + "</option>"
|
||
|
|
}), h
|
||
|
|
}, d.buildContent = function() {
|
||
|
|
var b, a = this;
|
||
|
|
a.dom.box.on("change", "select", function() {
|
||
|
|
a.selectChange(this.className)
|
||
|
|
}), b = a.getNewOptions(a.selectArray[0], a.dataJson), a.selectArray[0].html(b).prop("disabled", !1).trigger("change"), a.setDefaultValue()
|
||
|
|
}, d.setDefaultValue = function(a) {
|
||
|
|
var b, c;
|
||
|
|
a = a || 0, b = this, a >= b.selectSum || !b.selectArray[a] || (c = b.selectArray[a].data("value"), ("string" == typeof c || "number" == typeof c || "boolean" == typeof c) && (c = c.toString(), setTimeout(function() {
|
||
|
|
b.selectArray[a].val(c).trigger("change"), a++, b.setDefaultValue(a)
|
||
|
|
}, 1)))
|
||
|
|
}, d.selectChange = function(a) {
|
||
|
|
var b, c, d, e, f, h;
|
||
|
|
for (a = a.replace(/ /g, ","), a = "," + a + ",", b = [], h = 0; h < this.selectSum; h++) b.push(this.getIndex(this.selectArray[h].get(0).selectedIndex)), "number" == typeof c && h > c && (this.selectArray[h].empty().prop("disabled", !0), "none" === this.settings.nodata ? this.selectArray[h].css("display", "none") : "hidden" === this.settings.nodata && this.selectArray[h].css("visibility", "hidden")), a.indexOf("," + this.settings.selects[h] + ",") > -1 && (c = h);
|
||
|
|
for (d = c + 1, e = this.dataJson, h = 0; d > h; h++) {
|
||
|
|
if ("undefined" == typeof e[b[h]] || g(e[b[h]].s) === !1 || !e[b[h]].s.length) return;
|
||
|
|
e = e[b[h]].s
|
||
|
|
}
|
||
|
|
this.selectArray[d] && (f = this.getNewOptions(this.selectArray[d], e), this.selectArray[d].html(f).prop("disabled", !1).css({
|
||
|
|
display: "",
|
||
|
|
visibility: ""
|
||
|
|
}).trigger("change"))
|
||
|
|
}, d.init(), this
|
||
|
|
}, a.cxSelect.defaults = {
|
||
|
|
selects: [],
|
||
|
|
url: null,
|
||
|
|
nodata: null,
|
||
|
|
required: !1,
|
||
|
|
firstTitle: "请选择",
|
||
|
|
firstValue: "0"
|
||
|
|
}, a.fn.cxSelect = function(b, c) {
|
||
|
|
return this.each(function() {
|
||
|
|
a.cxSelect(this, b, c)
|
||
|
|
}), this
|
||
|
|
}
|
||
|
|
});
|