summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--js/jquery.multi-select.js8
-rw-r--r--test/spec/multiSelectSpec.js59
-rw-r--r--test/src/jquery.multi-select.js8
3 files changed, 61 insertions, 14 deletions
diff --git a/js/jquery.multi-select.js b/js/jquery.multi-select.js
index 0cb82e8..8a03e34 100644
--- a/js/jquery.multi-select.js
+++ b/js/jquery.multi-select.js
@@ -184,7 +184,7 @@
haveToSelect = null;
if (method == 'init'){
- haveToSelect = !selectableLi.hasClass(ms.data('settings').disabledClass) && selectedOption.attr('selected');
+ haveToSelect = !selectableLi.hasClass(ms.data('settings').disabledClass) && selectedOption.prop('selected');
} else {
haveToSelect = !selectableLi.hasClass(ms.data('settings').disabledClass);
ms.focus();
@@ -196,7 +196,7 @@
parentOptgroup.children('.ms-optgroup-label').hide();
selectableLi.addClass('ms-selected');
selectableLi.hide();
- selectedOption.attr('selected', 'selected');
+ selectedOption.prop('selected', true);
if(titleAttr){
selectedLi.attr('title', titleAttr)
}
@@ -239,7 +239,7 @@
$('li', selectedUl).removeClass('ms-hover');
});
if (ms.find("option[value='']")){
- ms.find("option[value='']").removeAttr('selected');
+ ms.find("option[value='']").prop('selected', false);
}
if (method == "select_all" && parentOptgroup.children('.ms-elem-selectable').length > 0){
parentOptgroup.children('.ms-optgroup-label').hide();
@@ -273,7 +273,7 @@
parentOptgroup.children('.ms-optgroup-label').addClass('ms-collapse').show();
parentOptgroup.children('.ms-elem-selectable:not(.ms-selected)').show();
}
- selectedOption.removeAttr('selected');
+ selectedOption.prop('selected', false);
selectableLi.show();
selectableLi.removeClass('ms-selected');
selectedLi.remove();
diff --git a/test/spec/multiSelectSpec.js b/test/spec/multiSelectSpec.js
index eca1b3c..65cbea8 100644
--- a/test/spec/multiSelectSpec.js
+++ b/test/spec/multiSelectSpec.js
@@ -5,14 +5,17 @@ describe("multiSelect", function() {
beforeEach(function() {
$('<select id="multi-select" multiple="multiple" name="test[]"></select>').appendTo('body');
for (var i=1; i <= 10; i++) {
- $('<option value="value'+i+'">text'+i+'</option>').appendTo('#multi-select');
+ $('<option value="value'+i+'">text'+i+'</option>').appendTo($("#multi-select"));
};
select = $("#multi-select");
- select.multiSelect();
- msContainer = select.next();
});
- describe('init', function(){
+ describe('init without options', function(){
+
+ beforeEach(function() {
+ select.multiSelect();
+ msContainer = select.next();
+ });
it('should hide the standard select', function(){
expect(select.css('position')).toBe('absolute');
@@ -39,13 +42,53 @@ describe("multiSelect", function() {
expect($('.ms-selection ul.ms-list li').length).toEqual(0);
});
+ });
+
+ describe('init with pre-selected options', function(){
+
+ var selectedValues = [];
+
+ beforeEach(function() {
+ var firstOption = select.children('option').first();
+ var lastOption = select.children('option').last();
+ firstOption.prop('selected', true);
+ lastOption.prop('selected', true);
+ selectedValues.push(firstOption.val(), lastOption.val());
+ select.multiSelect();
+ msContainer = select.next();
+ });
+
+ it ('should select the pre-selected options', function(){
+ $.each(selectedValues, function(index, value){
+ expect($('.ms-selectable ul.ms-list li[ms-value="'+value+'"]')).toBe('.ms-selected');
+ });
+ expect($('.ms-selectable ul.ms-list li.ms-selected').length).toEqual(2);
+ });
+ });
+
+ describe('init with keepOrder option activated', function(){
+ beforeEach(function() {
+ $('#multi-select').multiSelect({ keepOrder: true });
+ msContainer = select.next();
+ firstItem = $('.ms-selectable ul.ms-list li').first()
+ lastItem = $('.ms-selectable ul.ms-list li').last();
+ lastItem.trigger('click');
+ firstItem.trigger('click');
+ });
+ it('should keep order on selection list', function(){
+ expect($('.ms-selection li', msContainer).first().attr('ms-value')).toBe('value1');
+ expect($('.ms-selection li', msContainer).last().attr('ms-value')).toBe('value10');
+ });
});
+
+
describe("When selectable item is clicked", function(){
var clickedItem;
- beforeEach(function(){
+ beforeEach(function() {
+ $('#multi-select').multiSelect();
clickedItem = $('.ms-selectable ul.ms-list li').first();
spyOnEvent(select, 'change');
clickedItem.trigger('click');
@@ -70,10 +113,14 @@ describe("multiSelect", function() {
it('should trigger the standard select change event', function(){
expect('change').toHaveBeenTriggeredOn("#multi-select");
});
+
+ afterEach(function(){
+ select.multiSelect('deselect_all');
+ });
+
});
afterEach(function () {
$("#multi-select, .ms-container").remove();
});
-
}); \ No newline at end of file
diff --git a/test/src/jquery.multi-select.js b/test/src/jquery.multi-select.js
index 5f6653e..f97b3bb 100644
--- a/test/src/jquery.multi-select.js
+++ b/test/src/jquery.multi-select.js
@@ -184,7 +184,7 @@
haveToSelect = null;
if (method == 'init'){
- haveToSelect = !selectableLi.hasClass(ms.data('settings').disabledClass) && selectedOption.attr('selected');
+ haveToSelect = !selectableLi.hasClass(ms.data('settings').disabledClass) && selectedOption.prop('selected');
} else {
haveToSelect = !selectableLi.hasClass(ms.data('settings').disabledClass);
}
@@ -196,7 +196,7 @@
parentOptgroup.children('.ms-optgroup-label').hide();
selectableLi.addClass('ms-selected');
selectableLi.hide();
- selectedOption.attr('selected', 'selected');
+ selectedOption.prop('selected', true);
if(titleAttr){
selectedLi.attr('title', titleAttr)
}
@@ -239,7 +239,7 @@
$('li', selectedUl).removeClass('ms-hover');
});
if (ms.find("option[value='']")){
- ms.find("option[value='']").removeAttr('selected');
+ ms.find("option[value='']").prop('selected', false);
}
if (method == "select_all" && parentOptgroup.children('.ms-elem-selectable').length > 0){
parentOptgroup.children('.ms-optgroup-label').hide();
@@ -273,7 +273,7 @@
parentOptgroup.children('.ms-optgroup-label').addClass('ms-collapse').show();
parentOptgroup.children('.ms-elem-selectable:not(.ms-selected)').show();
}
- selectedOption.removeAttr('selected');
+ selectedOption.prop('selected', false);
selectableLi.show();
selectableLi.removeClass('ms-selected');
selectedLi.remove();