|
1 | 1 | /* global jQuery */
|
2 | 2 |
|
3 |
| -(function($) { |
| 3 | +(function ($) { |
4 | 4 | // Data keys
|
5 |
| - const KEY_DATA_INITED = "inited.cascadeSelect"; |
6 |
| - const KEY_DATA_OPTION = "option.cascadeSelect"; |
7 |
| - const KEY_DATA_PREVICOUSUPPERTIER = "previous-uppertier.cascadeSelect"; |
| 5 | + const KEY_DATA_INITED = 'inited.cascadeSelect' |
| 6 | + const KEY_DATA_OPTION = 'option.cascadeSelect' |
| 7 | + const KEY_DATA_PREVICOUSUPPERTIER = 'previous-uppertier.cascadeSelect' |
8 | 8 | // Events
|
9 |
| - const EVENT_CHANGE = "cascadeSelectChange"; |
| 9 | + const EVENT_CHANGE = 'cascadeSelectChange'; |
10 | 10 |
|
11 | 11 | // Override $.fn.val
|
12 | 12 | // Opt for elements which has used cascadeSelect plugin.
|
13 |
| - (function(originVal) { |
14 |
| - $.fn.val = function(value) { |
| 13 | + (function (originVal) { |
| 14 | + $.fn.val = function (value) { |
15 | 15 | // Getter
|
16 | 16 | if (!arguments.length) {
|
17 |
| - return originVal.call(this); |
| 17 | + return originVal.call(this) |
18 | 18 | }
|
19 | 19 |
|
20 | 20 | // Setter
|
21 |
| - const r = originVal.call(this, value); |
| 21 | + const r = originVal.call(this, value) |
22 | 22 | // Fire cascade changed
|
23 |
| - return r.each(function() { |
| 23 | + return r.each(function () { |
24 | 24 | if ($(this).data(KEY_DATA_INITED)) {
|
25 |
| - $(this).trigger(EVENT_CHANGE); |
| 25 | + $(this).trigger(EVENT_CHANGE) |
26 | 26 | }
|
27 |
| - }); |
28 |
| - }; |
29 |
| - })($.fn.val); |
| 27 | + }) |
| 28 | + } |
| 29 | + })($.fn.val) |
30 | 30 |
|
31 | 31 | // Generate list by upper-tier.
|
32 |
| - const getList = function(strUpperTier, dataSource) { |
33 |
| - if (dataSource && strUpperTier != undefined) { |
34 |
| - const upperTiers = strUpperTier.split(";"); |
35 |
| - let r = []; |
36 |
| - let upperTier; |
| 32 | + const getList = function (strUpperTier, dataSource) { |
| 33 | + if (dataSource && strUpperTier !== undefined) { |
| 34 | + const upperTiers = strUpperTier.split(';') |
| 35 | + let r = [] |
| 36 | + let upperTier |
37 | 37 |
|
38 | 38 | for (let i = 0, len = upperTiers.length; i < len; i++) {
|
39 |
| - upperTier = upperTiers[i]; |
| 39 | + upperTier = upperTiers[i] |
40 | 40 | // Only for valid list.
|
41 | 41 | if (dataSource[upperTier]) {
|
42 |
| - r = r.concat(dataSource[upperTier]); |
| 42 | + r = r.concat(dataSource[upperTier]) |
43 | 43 | }
|
44 | 44 | }
|
45 |
| - return r; |
| 45 | + return r |
46 | 46 | }
|
47 |
| - return null; |
48 |
| - }; |
| 47 | + return null |
| 48 | + } |
49 | 49 |
|
50 | 50 | // Generate option html
|
51 | 51 | const genOptionHtml = (value, text) =>
|
52 |
| - '<option value="' + value + '">' + text + "</option>"; |
| 52 | + '<option value="' + value + '">' + text + '</option>' |
53 | 53 |
|
54 | 54 | // Update select html
|
55 |
| - const updateOptionHtml = function(select, data, upperTier) { |
56 |
| - let list = getList(upperTier, data.dataSource); |
57 |
| - let $select = $(select); |
| 55 | + const updateOptionHtml = function (select, data, upperTier) { |
| 56 | + const list = getList(upperTier, data.dataSource) |
| 57 | + const $select = $(select) |
58 | 58 |
|
59 | 59 | if (list) {
|
60 | 60 | if (
|
61 | 61 | $select.data(KEY_DATA_PREVICOUSUPPERTIER) !== upperTier
|
62 | 62 | ) {
|
63 |
| - let h = []; |
64 |
| - let allIds = []; |
65 |
| - $.each(list, function(i, itm) { |
66 |
| - allIds.push(itm.id); |
67 |
| - h.push(genOptionHtml(itm.id, itm.label)); |
68 |
| - }); |
| 63 | + let h = [] |
| 64 | + let allIds = [] |
| 65 | + $.each(list, function (i, itm) { |
| 66 | + allIds.push(itm.id) |
| 67 | + h.push(genOptionHtml(itm.id, itm.label)) |
| 68 | + }) |
69 | 69 | // Generate default option
|
70 |
| - h.unshift(genOptionHtml(allIds.join(";"), data?.labels?.all ?? "全部")); |
71 |
| - $select.html(h.join("")); |
72 |
| - $select.data(KEY_DATA_PREVICOUSUPPERTIER, upperTier); |
73 |
| - h = null; |
74 |
| - allIds = null; |
| 70 | + h.unshift(genOptionHtml(allIds.join(';'), data?.labels?.all ?? '全部')) |
| 71 | + $select.html(h.join('')) |
| 72 | + $select.data(KEY_DATA_PREVICOUSUPPERTIER, upperTier) |
| 73 | + h = null |
| 74 | + allIds = null |
75 | 75 | }
|
76 | 76 | } else {
|
77 |
| - throw new Error("Missing data, key=" + upperTier); |
| 77 | + throw new Error('Missing data, key=' + upperTier) |
78 | 78 | }
|
79 |
| - }; |
| 79 | + } |
80 | 80 |
|
81 | 81 | /**
|
82 |
| - * $.fn.cascadeSelect plugin |
83 |
| - * @param {object} option plugin config data |
84 |
| - * @return {jQuery} jQuery object |
85 |
| - * option : |
86 |
| - * { |
87 |
| - * upperTierGetter: {function}, // return upperTier key |
88 |
| - * dataSource: {array} // Data source |
89 |
| - * } |
| 82 | + * $.fn.cascadeSelect Plugin |
| 83 | + * |
| 84 | + * @param {Object} option config data for plugin |
| 85 | + * @param {function} option.upperTierGetter return upperTier key |
| 86 | + * @param {Array} option.dataSource data source |
| 87 | + * @param {?Object} option.labels label map |
| 88 | + * @return {jQuery} |
90 | 89 | *
|
91 | 90 | */
|
92 |
| - $.fn.cascadeSelect = function(option) { |
93 |
| - return this.each(function() { |
94 |
| - const $this = $(this); |
| 91 | + $.fn.cascadeSelect = function (option) { |
| 92 | + return this.each(function () { |
| 93 | + const $this = $(this) |
95 | 94 | if (!$this.data(KEY_DATA_INITED)) {
|
96 |
| - $this.data(KEY_DATA_INITED, true); |
| 95 | + $this.data(KEY_DATA_INITED, true) |
97 | 96 | }
|
98 | 97 |
|
99 |
| - updateOptionHtml(this, option, option.upperTierGetter()); |
| 98 | + updateOptionHtml(this, option, option.upperTierGetter()) |
100 | 99 |
|
101 |
| - $this.data(KEY_DATA_OPTION, option); |
| 100 | + $this.data(KEY_DATA_OPTION, option) |
102 | 101 |
|
103 | 102 | // If value changed, then call updated.
|
104 |
| - $this.bind("change", function() { |
105 |
| - const $this = $(this); |
106 |
| - const val = $this.val(); |
107 |
| - updateOptionHtml(this, option, option.upperTierGetter()); |
108 |
| - $this.val(val); // A trick, get the real value. |
109 |
| - }); |
| 103 | + $this.bind('change', function () { |
| 104 | + const $this = $(this) |
| 105 | + const val = $this.val() |
| 106 | + updateOptionHtml(this, option, option.upperTierGetter()) |
| 107 | + $this.val(val) // A trick, get the real value. |
| 108 | + }) |
110 | 109 |
|
111 | 110 | // For external API. Like $(elem).trigger("update");
|
112 |
| - $this.bind("update", function() { |
113 |
| - const $this = $(this); |
114 |
| - $this.trigger("change"); |
115 |
| - }); |
116 |
| - }); |
117 |
| - }; |
118 |
| -})(jQuery); |
| 111 | + $this.bind('update', function () { |
| 112 | + const $this = $(this) |
| 113 | + $this.trigger('change') |
| 114 | + }) |
| 115 | + }) |
| 116 | + } |
| 117 | +})(jQuery) |
0 commit comments