Skip to content
This repository was archived by the owner on Oct 15, 2024. It is now read-only.

Commit 9254b29

Browse files
committed
Added multiple pre-select for #50
1 parent 6e5f9cd commit 9254b29

File tree

2 files changed

+43
-15
lines changed

2 files changed

+43
-15
lines changed

index.html

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ <h4>Multiple select</h4>
364364
<h4>Phone finder</h4>
365365

366366
<select class="step1" name="screen" multiple="multiple">
367-
<option value="4" selected="selected">4.0"</option>
367+
<option value="4">4.0"</option>
368368
<option value="4.3">4.3"</option>
369369
<option value="4.7">4.7"</option>
370370
<option value="5">5.0"</option>
@@ -394,7 +394,7 @@ <h4>Matches <img src="res/ajax-loader.gif" data-bind="visible: loading" /></h4>
394394
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/knockout/2.3.0/knockout-min.js"></script>
395395
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-mockjax/1.6.1/jquery.mockjax.min.js"></script>
396396
<script type="text/javascript" src="res/ajax-mocks.js"></script>
397-
<script type="text/javascript" src="dist/jquery.cascadingdropdown.min.js"></script>
397+
<script type="text/javascript" src="src/jquery.cascadingdropdown.js"></script>
398398
<script type="text/javascript">
399399
function viewmodel() {
400400
this.phones = ko.observableArray([]);
@@ -554,7 +554,11 @@ <h4>Matches <img src="res/ajax-loader.gif" data-bind="visible: loading" /></h4>
554554
$('#example4').cascadingDropdown({
555555
selectBoxes: [
556556
{
557-
selector: '.step1'
557+
selector: '.step1',
558+
selected: [1, 2],
559+
onChange: function(e, selected) {
560+
console.log(selected)
561+
}
558562
},
559563
{
560564
selector: '.step2',

src/jquery.cascadingdropdown.js

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -215,13 +215,13 @@
215215
return;
216216
}
217217

218-
var selected;
218+
var selected = [];
219219

220220
// Add all items as dropdown item
221221
var getOption = function(item) {
222222
var selectedAttr = '';
223223
if(item.selected) {
224-
selected = item;
224+
selected.push(item.value.toString());
225225
}
226226

227227
return '<option value="' + item.value + '"' + selectedAttr + '>' + item.label + '</option>';
@@ -248,7 +248,7 @@
248248
self.enable();
249249

250250
// If a selected item exists, set it as default
251-
selected && self.setSelected(selected.value.toString());
251+
selected.length && self.setSelected(selected);
252252

253253
self._triggerReady();
254254
},
@@ -273,19 +273,43 @@
273273
if(typeof triggerChange === 'undefined') {
274274
triggerChange = true;
275275
}
276-
277-
// If given value is a string, get the index where it appears in the dropdown
278-
if(typeof indexOrValue === 'string') {
279-
indexOrValue = dropdownItems.index(dropdownItems.filter(function() { return this.value === indexOrValue; })[0]);
276+
277+
var selectedItems = [];
278+
279+
// check if indexOrValue is an array
280+
if($.isArray(indexOrValue)) {
281+
selectedItems = indexOrValue;
282+
} else {
283+
selectedItems = selectedItems.concat(indexOrValue);
280284
}
281285

282-
// If index is undefined or out of bounds, do nothing
283-
if(indexOrValue === undefined || indexOrValue < 0 || indexOrValue > dropdownItems.length) {
284-
return;
285-
}
286+
var selectedValue;
287+
if(self.el.is('[multiple]')) {
288+
selectedValue = selectedItems.map(function(item) {
289+
if(typeof item === 'number'
290+
&& (item !== undefined
291+
&& item > -1
292+
&& item < dropdownItems.length)) {
293+
return dropdownItems[item].value
294+
}
295+
296+
return item;
297+
});
286298

299+
} else {
300+
selectedValue = selectedItems[0];
301+
302+
// if selected item is a number, get the value for the item at that index
303+
if(typeof selectedItems[0] === 'number'
304+
&& (selectedItems[0] !== undefined
305+
&& selectedItems[0] > -1
306+
&& selectedItems[0] < dropdownItems.length)) {
307+
selectedValue = dropdownItems[selectedItems[0]].value;
308+
}
309+
}
310+
287311
// Set the dropdown item
288-
self.el[0].selectedIndex = indexOrValue;
312+
self.el.val(selectedValue);
289313

290314
// Trigger change event
291315
if(triggerChange) {

0 commit comments

Comments
 (0)