diff options
-rw-r--r-- | js/jquery.multi-select.js | 8 | ||||
-rw-r--r-- | test/spec/multiSelectSpec.js | 59 | ||||
-rw-r--r-- | test/src/jquery.multi-select.js | 8 |
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(); |