summaryrefslogtreecommitdiffstats
path: root/js/jquery.multi-select.js
diff options
context:
space:
mode:
authorlou <louiscuny@gmail.com>2011-04-15 10:00:20 +0200
committerlou <louiscuny@gmail.com>2011-04-15 10:00:20 +0200
commit179adc9b4e838c1459c331f0abc04d1dba14311b (patch)
tree5dd348e41f40a15f8b1477170fb8eeea76d96734 /js/jquery.multi-select.js
parent48eead0dea5d2ceb286d75076d17631b8000d4d7 (diff)
downloadmulti-select-179adc9b4e838c1459c331f0abc04d1dba14311b.zip
multi-select-179adc9b4e838c1459c331f0abc04d1dba14311b.tar.gz
multi-select-179adc9b4e838c1459c331f0abc04d1dba14311b.tar.bz2
add callbacks
Diffstat (limited to 'js/jquery.multi-select.js')
-rw-r--r--js/jquery.multi-select.js71
1 files changed, 45 insertions, 26 deletions
diff --git a/js/jquery.multi-select.js b/js/jquery.multi-select.js
index 9322501..8fc86b1 100644
--- a/js/jquery.multi-select.js
+++ b/js/jquery.multi-select.js
@@ -3,6 +3,7 @@
var methods = {
'init' : function(options){
this.settings = {
+
};
if(options) {
this.settings = $.extend(this.settings, options);
@@ -20,6 +21,7 @@
var selectableUl = $('<ul></ul>');
var selectedUl = $('<ul></ul>');
+ ms.data('settings', multiSelects.settings);
ms.children('option').each(function(){
var selectableLi = $('<li ms-value="'+$(this).val()+'"></li>');
@@ -28,7 +30,7 @@
ms.multiSelect('select', $(this).attr('ms-value'));
});
selectableUl.append(selectableLi);
- })
+ });
selectableContainer.append(selectableUl);
selectedContainer.append(selectedUl);
container.append(selectableContainer);
@@ -36,40 +38,57 @@
ms.after(container);
ms.children('option').each(function(){
if($(this).attr('selected')){
- ms.multiSelect('select', $(this).val());
+ ms.multiSelect('select', $(this).val(), 'init');
}
});
});
},
- 'select' : function(value){
+ 'select' : function(value, method){
var ms = this;
var msValues = (ms.val() ? ms.val() : []);
- var option = ms.find('option[value="'+value+'"]');
- var selectedLi = $('<li ms-value="'+value+'"></li>');
- var newValues = $.merge(msValues, [value]);
- var selectableUl = $('#ms-'+ms.attr('id')+' .ms-selectable ul');
- var selectedUl = $('#ms-'+ms.attr('id')+' .ms-selection ul');
- var selectableLi = selectableUl.children('li[ms-value="'+value+'"]');
+ var alreadyPresent = $.inArray(value, ms.val());
- selectableLi.hide();
- ms.val(newValues);
- selectedLi.html(option.text());
- selectedLi.click(function(){
- ms.multiSelect('deselect', $(this).attr('ms-value'));
- });
- selectedUl.append(selectedLi);
-
+ if(alreadyPresent == -1 || method == 'init'){
+ var option = ms.find('option[value="'+value+'"]');
+ var selectedLi = $('<li ms-value="'+value+'"></li>');
+ var newValues = $.merge(msValues, [value]);
+ var selectableUl = $('#ms-'+ms.attr('id')+' .ms-selectable ul');
+ var selectedUl = $('#ms-'+ms.attr('id')+' .ms-selection ul');
+ var selectableLi = selectableUl.children('li[ms-value="'+value+'"]');
+ var text = option.text();
+
+ selectableLi.hide();
+ ms.val(newValues);
+ selectedLi.html(text);
+ selectedLi.click(function(){
+ ms.multiSelect('deselect', $(this).attr('ms-value'));
+ });
+ selectedUl.append(selectedLi);
+ if (typeof ms.data('settings').afterSelect == 'function' && method != 'init') {
+ ms.data('settings').afterSelect.call(this, value, text);
+ }
+ }
},
'deselect' : function(value){
var ms = this;
- var selectableUl = $('#ms-'+ms.attr('id')+' .ms-selectable ul');
- var selectedUl = $('#ms-'+ms.attr('id')+' .ms-selection ul');
- var selectableLi = selectableUl.children('li[ms-value="'+value+'"]');
- var selectedLi = selectedUl.children('li[ms-value="'+value+'"]');
- var newValues = $.map(ms.val(), function(e){ if(e != value){ return e; }});
- ms.val(newValues);
- selectableLi.show();
- selectedLi.remove();
+ var msValues = (ms.val() ? ms.val() : []);
+ var present = false;
+ var newValues = $.map(msValues, function(e){ if(e != value){ return e; }else{ present = true}});
+
+ if(present){
+ var selectableUl = $('#ms-'+ms.attr('id')+' .ms-selectable ul');
+ var selectedUl = $('#ms-'+ms.attr('id')+' .ms-selection ul');
+ var selectableLi = selectableUl.children('li[ms-value="'+value+'"]');
+ var selectedLi = selectedUl.children('li[ms-value="'+value+'"]');
+ var text = selectedLi.text();
+
+ ms.val(newValues);
+ selectableLi.show();
+ selectedLi.remove();
+ if (typeof ms.data('settings').afterDeselect == 'function') {
+ ms.data('settings').afterDeselect.call(this, value, text);
+ }
+ }
}
}
@@ -82,4 +101,4 @@
if(console.log) console.log( 'Method ' + method + ' does not exist on jquery.multiSelect' );
}
}
-})(jQuery);
+})(jQuery); \ No newline at end of file