summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demos.html18
-rw-r--r--js/application.js2
-rw-r--r--js/jquery.multi-select.js36
3 files changed, 55 insertions, 1 deletions
diff --git a/demos.html b/demos.html
index 93e9f22..2162fc0 100644
--- a/demos.html
+++ b/demos.html
@@ -35,6 +35,7 @@
<div id='demos-container'>
<ul id='demos-menu'>
<li id='simple' class='active'>Simple</li>
+ <li id='keeporder'>Keep Order</li>
<li id='optgroup'>Optgroup</li>
<li id='callbacks'>Callbacks</li>
<li id='outside'>Outside call</li>
@@ -63,6 +64,23 @@
</select>
</form>
</div>
+ <div class='keeporder' style='display:none'>
+ <form>
+ <select multiple='multiple' id='ikeeporder'>
+ <option value='fr'>France</option>
+ <option value='ca' selected='selected'>Canada</option>
+ <option value='ar' selected='selected'>Argentina</option>
+ <option value='pt'>Portugal</option>
+ <option value='us'>United States</option>
+ <option value='gb'>United Kingdom</option>
+ <option value='au'>Australia</option>
+ <option value='ao'>Angola</option>
+ <option value='aq'>Antarctica</option>
+ <option value='bq'>Burkina Faso</option>
+ <option value='cn'>China</option>
+ </select>
+ </form>
+ </div>
<div class='optgroup' style='display:none'>
<form>
<select multiple='multiple' class='multiselect' id='optgroup'>
diff --git a/js/application.js b/js/application.js
index 81a2fe6..d2dbaae 100644
--- a/js/application.js
+++ b/js/application.js
@@ -28,6 +28,8 @@
$('#simpleCountries').multiSelect({});
+ $('#ikeeporder').multiSelect({ keepOrder: true });
+
$('#empty-array-select').multiSelect({ emptyArray: true})
$('#callbackCountries').multiSelect({
diff --git a/js/jquery.multi-select.js b/js/jquery.multi-select.js
index 1127d16..bb69c08 100644
--- a/js/jquery.multi-select.js
+++ b/js/jquery.multi-select.js
@@ -1,3 +1,13 @@
+/*
+* MultiSelect v0.2
+* Copyright (c) 2011 Louis Cuny
+*
+* Dual licensed under the MIT and GPL licenses:
+* http://www.opensource.org/licenses/mit-license.php
+* http://www.gnu.org/licenses/gpl.html
+*
+*/
+
(function($){
var msMethods = {
'init' : function(options){
@@ -5,6 +15,7 @@
disabledClass : 'disabled',
emptyArray : false,
callbackOnInit: false
+ keepOrder : false
};
if(options) {
this.settings = $.extend(this.settings, options);
@@ -110,7 +121,30 @@
selectedLi.click(function(){
ms.multiSelect('deselect', $(this).attr('ms-value'));
});
- selectedUl.append(selectedLi);
+
+ 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 {
+ selectedUl.append(selectedLi);
+ }
+
if (ms.find("option[value='']")){
ms.find("option[value='']").removeAttr('selected');
}