summaryrefslogtreecommitdiffstats
path: root/js/jquery.multi-select.js
diff options
context:
space:
mode:
authorlou <louiscuny@gmail.com>2011-12-16 13:25:03 +0100
committerlou <louiscuny@gmail.com>2011-12-16 13:25:03 +0100
commit08a530d3e1f825828ff3cdc2d4ba188d549d9307 (patch)
tree9b3007d871c98fb2f5b2949cd17790deb4629f9f /js/jquery.multi-select.js
parent305c95b5a9e6030325eb46da61b2a1d34e6ecd7d (diff)
downloadmulti-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.js106
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);
- }
}
}
},