diff options
author | lou <louiscuny@gmail.com> | 2011-12-16 13:25:03 +0100 |
---|---|---|
committer | lou <louiscuny@gmail.com> | 2011-12-16 13:25:03 +0100 |
commit | 08a530d3e1f825828ff3cdc2d4ba188d549d9307 (patch) | |
tree | 9b3007d871c98fb2f5b2949cd17790deb4629f9f /js/jquery.multi-select.js | |
parent | 305c95b5a9e6030325eb46da61b2a1d34e6ecd7d (diff) | |
download | multi-select-08a530d3e1f825828ff3cdc2d4ba188d549d9307.zip multi-select-08a530d3e1f825828ff3cdc2d4ba188d549d9307.tar.gz multi-select-08a530d3e1f825828ff3cdc2d4ba188d549d9307.tar.bz2 |
fix #18 Disabled multi-select doesn't show selected items
Diffstat (limited to 'js/jquery.multi-select.js')
-rw-r--r-- | js/jquery.multi-select.js | 106 |
1 files changed, 56 insertions, 50 deletions
diff --git a/js/jquery.multi-select.js b/js/jquery.multi-select.js index 7de7f40..ad5863f 100644 --- a/js/jquery.multi-select.js +++ b/js/jquery.multi-select.js @@ -100,67 +100,73 @@ klass = selectedOption.attr('class'), titleAttr = selectedOption.attr('title'); - var selectedLi = $('<li class="ms-elem-selected'+(klass ? ' '+klass : '')+'" ms-value="'+value+'">'+text+'</li>'), - selectableUl = $('#ms-'+ms.attr('id')+' .ms-selectable ul'), - selectedUl = $('#ms-'+ms.attr('id')+' .ms-selection ul'), - selectableLi = selectableUl.children('li[ms-value="'+value+'"]'), - haveToSelect = !selectableLi.hasClass(ms.data('settings').disabledClass) && value != '' && - ((method == 'init' && selectedOption.attr('selected')) || - (method != 'init' && !selectedOption.attr('selected'))) + var selectedLi = $('<li class="ms-elem-selected'+(klass ? ' '+klass : '')+'" ms-value="'+value+'">'+text+'</li>'), + selectableUl = $('#ms-'+ms.attr('id')+' .ms-selectable ul'), + selectedUl = $('#ms-'+ms.attr('id')+' .ms-selection ul'), + selectableLi = selectableUl.children('li[ms-value="'+value+'"]'), + haveToSelect = ((!selectableLi.hasClass(ms.data('settings').disabledClass)) || + (selectableLi.hasClass(ms.data('settings').disabledClass) && method == 'init')) && + value != '' && + ((method == 'init' && selectedOption.attr('selected')) || + (method != 'init' && !selectedOption.attr('selected'))) - if (haveToSelect ){ - var parentOptgroup = selectableLi.parent('.ms-optgroup'); - if (parentOptgroup.length > 0) - if (parentOptgroup.children('.ms-elem-selectable:not(:hidden)').length == 1) - parentOptgroup.children('.ms-optgroup-label').hide(); - selectableLi.addClass('ms-selected'); - selectableLi.hide(); - selectedOption.attr('selected', 'selected'); - if(titleAttr){ - selectedLi.attr('title', titleAttr) - } + if (haveToSelect ){ + var parentOptgroup = selectableLi.parent('.ms-optgroup'); + if (parentOptgroup.length > 0) + if (parentOptgroup.children('.ms-elem-selectable:not(:hidden)').length == 1) + parentOptgroup.children('.ms-optgroup-label').hide(); + selectableLi.addClass('ms-selected'); + selectableLi.hide(); + selectedOption.attr('selected', 'selected'); + if(titleAttr){ + selectedLi.attr('title', titleAttr) + } + if (selectableLi.hasClass(ms.data('settings').disabledClass)){ + selectedLi.addClass(ms.data('settings').disabledClass); + } else { selectedLi.click(function(){ ms.multiSelect('deselect', $(this).attr('ms-value')); }); + } - var selectedUlLis = selectedUl.children('.ms-elem-selected'); - if (method != 'init' && ms.data('settings').keepOrder && selectedUlLis.length > 0) { + var selectedUlLis = selectedUl.children('.ms-elem-selected'); + if (method != 'init' && ms.data('settings').keepOrder && selectedUlLis.length > 0) { - var getIndexOf = function(value) { - elems = selectableUl.children('.ms-elem-selectable'); - return(elems.index(elems.closest('[ms-value="'+value+'"]'))); - } - - var index = getIndexOf(selectedLi.attr('ms-value')); - if (index == 0) - selectedUl.prepend(selectedLi); - else { - for (i = index - 1; i >= 0; i--){ - if (selectedUlLis[i] && getIndexOf($(selectedUlLis[i]).attr('ms-value')) < index) { - $(selectedUlLis[i]).after(selectedLi); - break; - } else if (i == 0) { - $(selectedUlLis[i]).before(selectedLi); - } + var getIndexOf = function(value) { + elems = selectableUl.children('.ms-elem-selectable'); + return(elems.index(elems.closest('[ms-value="'+value+'"]'))); + } + + var index = getIndexOf(selectedLi.attr('ms-value')); + if (index == 0) + selectedUl.prepend(selectedLi); + else { + for (i = index - 1; i >= 0; i--){ + if (selectedUlLis[i] && getIndexOf($(selectedUlLis[i]).attr('ms-value')) < index) { + $(selectedUlLis[i]).after(selectedLi); + break; + } else if (i == 0) { + $(selectedUlLis[i]).before(selectedLi); } } - } else { - selectedUl.append(selectedLi); } + } else { + selectedUl.append(selectedLi); + } - if (ms.find("option[value='']")){ - ms.find("option[value='']").removeAttr('selected'); - } - if (method == "select_all" && parentOptgroup.children('.ms-elem-selectable').length > 0){ - parentOptgroup.children('.ms-optgroup-label').hide(); + if (ms.find("option[value='']")){ + ms.find("option[value='']").removeAttr('selected'); + } + if (method == "select_all" && parentOptgroup.children('.ms-elem-selectable').length > 0){ + parentOptgroup.children('.ms-optgroup-label').hide(); + } + if(method != 'init' || ms.data('settings').callbackOnInit){ + selectedUl.trigger('change'); + selectableUl.trigger('change'); + if (typeof ms.data('settings').afterSelect == 'function' && + (method != 'init' || ms.data('settings').callbackOnInit)) { + ms.data('settings').afterSelect.call(this, value, text); } - if(method != 'init' || ms.data('settings').callbackOnInit){ - selectedUl.trigger('change'); - selectableUl.trigger('change'); - if (typeof ms.data('settings').afterSelect == 'function' && - (method != 'init' || ms.data('settings').callbackOnInit)) { - ms.data('settings').afterSelect.call(this, value, text); - } } } }, |