How Can I Move Selected Option In Multiselect Up And Down By Buttons Using Jquery?
I have select
Solution 1:
Update: Fixed code for multiple options selected, based on @patrick dw's suggestion.
$(document).ready(function(){
$('input[type="button"]').click(function(){
var$op = $('#select2 option:selected'),
$this = $(this);
if($op.length){
($this.val() == 'Up') ?
$op.first().prev().before($op) :
$op.last().next().after($op);
}
});
});
No need to use inline onclick=""
event listeners. jQuery takes full control of separating presentation from functionality.
Solution 2:
if you do not use jquery
function moveUp(){
varselect = document.getElementById("columnOrder");
var options = select && select.options;
var selected = [];
for (var i = 0, iLen = options.length; i < iLen; i++) {
if (options[i].selected) {
selected.push(options[i]);
}
}
for (i = 0, iLen = selected.length; i < iLen; i++) {
var index = selected[i].index;
if(index == 0){
break;
}
var temp = selected[i].text;
selected[i].text = options[index - 1].text;
options[index - 1].text = temp;
temp = selected[i].value;
selected[i].value = options[index - 1].value;
options[index - 1].value = temp;
selected[i].selected = false;
options[index - 1].selected = true;
}
}
function moveDown(){
varselect = document.getElementById("columnOrder");
var options = select && select.options;
var selected = [];
for (var i = 0, iLen = options.length; i < iLen; i++) {
if (options[i].selected) {
selected.push(options[i]);
}
}
for (i = selected.length - 1, iLen = 0; i >= iLen; i--) {
var index = selected[i].index;
if(index == (options.length - 1)){
break;
}
var temp = selected[i].text;
selected[i].text = options[index + 1].text;
options[index + 1].text = temp;
temp = selected[i].value;
selected[i].value = options[index + 1].value;
options[index + 1].value = temp;
selected[i].selected = false;
options[index + 1].selected = true;
}
}
Solution 3:
functionup() {
var selected = $("#select2").find(":selected");
var before = selected.prev();
if (before.length > 0)
selected.detach().insertBefore(before);
}
functiondown() {
var selected = $("#select2").find(":selected");
var next = selected.next();
if (next.length > 0)
selected.detach().insertAfter(next);
}
Solution 4:
I created a jquery plugin for this: https://github.com/UziTech/jquery.moveSelected.js
usage:
$("button#up").click(function(){
$("select").moveSelectedUp();
});
$("button#down").click(function(){
$("select").moveSelectedDown();
});
Solution 5:
here is the same idea as the previously-posted non-jquery example, but with some strategic code re-use. My need was to have the buttons always operate on the same select element, named "cols". You could put "sel" as a parameter of the moveUp() and moveDown() functions if you want something more generic.
functionmoveUp() {
var sel = document.getElementById("cols");
var i1=0, i2=1;
while (i2 < sel.options.length) {
swapIf(sel,i1++,i2++);
}
}
functionmoveDown() {
var sel = document.getElementById("cols");
var i1=sel.options.length-1, i2=i1-1;
while (i1 > 0) {
swapIf(sel,i1--,i2--);
}
}
var swapVar = '';
functionswapIf(sel,i1,i2) {
if ( ! sel[i1].selected && sel[i2].selected) {
swapVar = sel[i2].text;
sel[i2].text = sel[i1].text;
sel[i1].text = swapVar;
swapVar = sel[i2].value;
sel[i2].value = sel[i1].value;
sel[i1].value = swapVar;
sel[i1].selected = true;
sel[i2].selected = false;
}
}
Post a Comment for "How Can I Move Selected Option In Multiselect Up And Down By Buttons Using Jquery?"