Skip to content

Commit 06193c5

Browse files
committed
Always acknowledge field settings when populating from DOM. Fixes selectize#139.
1 parent ff0745a commit 06193c5

File tree

1 file changed

+37
-30
lines changed

1 file changed

+37
-30
lines changed

src/selectize.jquery.js

Lines changed: 37 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,32 @@
1-
$.fn.selectize = function(settings) {
1+
$.fn.selectize = function(settings_user) {
22
settings = settings || {};
33

4-
var defaults = $.fn.selectize.defaults;
5-
var dataAttr = settings.dataAttr || defaults.dataAttr;
4+
var defaults = $.fn.selectize.defaults;
5+
var settings = $.extend({}, defaults, settings_user);
6+
var attr_data = settings.dataAttr;
7+
var field_label = settings.labelField;
8+
var field_value = settings.valueField;
9+
var field_optgroup = settings.optgroupField;
10+
var field_optgroup_label = settings.optgroupLabelField;
11+
var field_optgroup_value = settings.optgroupValueField;
612

713
/**
814
* Initializes selectize from a <input type="text"> element.
915
*
1016
* @param {object} $input
11-
* @param {object} settings
17+
* @param {object} settings_element
1218
*/
1319
var init_textbox = function($input, settings_element) {
14-
var i, n, values, value = $.trim($input.val() || '');
20+
var i, n, values, option, value = $.trim($input.val() || '');
1521
if (!value.length) return;
1622

17-
values = value.split(settings.delimiter || defaults.delimiter);
23+
values = value.split(settings.delimiter);
1824
for (i = 0, n = values.length; i < n; i++) {
19-
settings_element.options[values[i]] = {
20-
'text' : values[i],
21-
'value' : values[i]
22-
};
25+
option = {};
26+
option[field_label] = values[i];
27+
option[field_value] = values[i];
28+
29+
settings_element.options[values[i]] = option;
2330
}
2431

2532
settings_element.items = values;
@@ -29,18 +36,14 @@ $.fn.selectize = function(settings) {
2936
* Initializes selectize from a <select> element.
3037
*
3138
* @param {object} $input
32-
* @param {object} settings
39+
* @param {object} settings_element
3340
*/
3441
var init_select = function($input, settings_element) {
35-
var i, n, tagName;
36-
var $children;
37-
var order = 0;
42+
var i, n, tagName, $children, order = 0;
3843
var options = settings_element.options;
3944

40-
settings_element.maxItems = !!$input.attr('multiple') ? null : 1;
41-
4245
var readData = function($el) {
43-
var data = dataAttr && $el.attr(dataAttr);
46+
var data = attr_data && $el.attr(attr_data);
4447
if (typeof data === 'string' && data.length) {
4548
return JSON.parse(data);
4649
}
@@ -72,11 +75,10 @@ $.fn.selectize = function(settings) {
7275
return;
7376
}
7477

75-
option = readData($option) || {
76-
'text' : $option.text(),
77-
'value' : value,
78-
'optgroup' : group
79-
};
78+
option = readData($option) || {};
79+
option[field_label] = option[field_label] || $option.text();
80+
option[field_value] = option[field_value] || value;
81+
option[field_optgroup] = option[field_optgroup] || group;
8082

8183
option.$order = ++order;
8284
options[value] = option;
@@ -87,21 +89,26 @@ $.fn.selectize = function(settings) {
8789
};
8890

8991
var addGroup = function($optgroup) {
90-
var i, n, $options = $('option', $optgroup);
92+
var i, n, id, optgroup, $options;
93+
9194
$optgroup = $($optgroup);
95+
id = $optgroup.attr('label');
9296

93-
var id = $optgroup.attr('label');
94-
if (id && id.length) {
95-
settings_element.optgroups[id] = readData($optgroup) || {
96-
'label': id
97-
};
97+
if (id) {
98+
optgroup = readData($optgroup) || {};
99+
optgroup[field_optgroup_label] = id;
100+
optgroup[field_optgroup_value] = id;
101+
settings_element.optgroups[id] = optgroup;
98102
}
99103

104+
$options = $('option', $optgroup);
100105
for (i = 0, n = $options.length; i < n; i++) {
101106
addOption($options[i], id);
102107
}
103108
};
104109

110+
settings_element.maxItems = $input.attr('multiple') ? null : 1;
111+
105112
$children = $input.children();
106113
for (i = 0, n = $children.length; i < n; i++) {
107114
tagName = $children[i].tagName.toLowerCase();
@@ -116,7 +123,7 @@ $.fn.selectize = function(settings) {
116123
return this.each(function() {
117124
var instance;
118125
var $input = $(this);
119-
var tag_name = $input[0].tagName.toLowerCase();
126+
var tag_name = this.tagName.toLowerCase();
120127
var settings_element = {
121128
'placeholder' : $input.children('option[value=""]').text() || $input.attr('placeholder'),
122129
'options' : {},
@@ -130,7 +137,7 @@ $.fn.selectize = function(settings) {
130137
init_textbox($input, settings_element);
131138
}
132139

133-
instance = new Selectize($input, $.extend(true, {}, defaults, settings_element, settings));
140+
instance = new Selectize($input, $.extend(true, {}, defaults, settings_element, settings_user));
134141
$input.data('selectize', instance);
135142
$input.addClass('selectized');
136143
});

0 commit comments

Comments
 (0)