How can I move items from one list box control to another listbox control using JavaScript in ASP.NET?
+22
A:
If you're happy to use jQuery, it's very, very simple.
$('#firstSelect option:selected').appendTo('#secondSelect');
Where #firstSelect is the ID of the select box.
I've included a working example here:
http://jsbin.com/aluzu (to edit: http://jsbin.com/aluzu/edit)
Remy Sharp
2008-10-15 09:30:56
I am using javascript could you please provide me in javascript
balaweblog
2008-10-15 09:37:00
You shouldn't use remove() here. It will delete any event handlers you might have. $("#firstSelect option:selected").appendTo("#secondSelect") will retain any events, and has the exact same effect.
nickf
2008-10-15 13:50:06
@balaweblog: That is javascript
2009-01-02 19:26:17
+3
A:
This code assumes that you have an anchor or that will trigger to movement when it is clicked:
document.getElementById('moveTrigger').onclick = function() {
var listTwo = document.getElementById('secondList');
var options = document.getElementById('firstList').getElementsByTagName('option');
while(options.length != 0) {
listTwo.appendChild(options[0]);
}
}
Tom
2008-10-15 11:47:58
I don't think this would remove the option from the list you are moving it from.
James McMahon
2009-04-13 17:37:07
@nemo Try it and see. It works fine. The appendChild() function removes the option from it's current parent and moves it to that which is specified; otherwise, you'd be duplicating the node in the DOM.
Tom
2009-04-14 13:01:18
Ah, thanks for the explanation Tom, my bad for not trying to first.
James McMahon
2009-04-14 17:49:50
@nemo Not a problem! In my opinion, it's always nice to know *how* something works instead of just *that* it works.
Tom
2009-04-14 23:23:51
+4
A:
A library-independent solution:
function Move(inputControl)
{
var left = document.getElementById("Left");
var right = document.getElementById("Right");
var from, to;
var bAll = false;
switch (inputControl.value)
{
case '<<':
bAll = true;
// Fall through
case '<':
from = right; to = left;
break;
case '>>':
bAll = true;
// Fall through
case '>':
from = left; to = right;
break;
default:
alert("Check your HTML!");
}
for (var i = from.length - 1; i >= 0; i--)
{
var o = from.options[i];
if (bAll || o.selected)
{
from.remove(i);
try
{
to.add(o, null); // Standard method, fails in IE (6&7 at least)
}
catch (e)
{
to.add(o); // IE only
}
}
}
}
HTML
<select id="Left" multiple="multiple" size="10">
<option>Some</option>
<option>List</option>
<option>Of</option>
<option>Items</option>
<option>To</option>
<option>Move</option>
<option>Around</option>
</select>
<div id="Toolbar">
<input type="button" value=">" onclick="Move(this)"/>
<input type="button" value=">>" onclick="Move(this)"/>
<input type="button" value="<<" onclick="Move(this)"/>
<input type="button" value="<" onclick="Move(this)"/>
</div>
<select id="Right" multiple="multiple" size="10">
</select>
CSS (example)
select { width: 200px; float: left; }
#Toolbar { width: 50px; float: left; text-align: center; padding-top: 30px; }
#Toolbar input { width: 40px; }
Quick test FF3 and IE6 & 7 only.
PhiLho
2008-10-15 12:03:47
This solution didn't work for me in ASP.NET because I needed the controls to handle their own ViewState (previously selected values) between posts but it did work really well for simple HTML/Javascript manipulation of the select lists.
Chris Porter
2009-09-21 19:59:12
A:
Just add other way moving. http://jsbin.com/iheke http://jsbin.com/iheke/edit