2008-10-15 15 views
18

¿Cómo puedo mover elementos de un control de cuadro de lista a otro control de cuadro de lista usando JavaScript en ASP.NET?Mover elementos en Dual Listboxes

+0

Estoy eliminando la etiqueta asp.net, ya que esto no tiene nada que ver con asp.net. –

+1

@balaweblog: ¿Está tratando de utilizar el control ASP.NET ListBox como su base en la que desea mover los elementos dentro o fuera? Si es así, la etiqueta de ASP.NET es válida y la volveré a agregar y publicar una solución que ayudará con ASP.NET. –

Respuesta

6

Este código se supone que tiene un ancla o que activará al movimiento cuando se hace clic en:

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]); 
    } 

} 
+0

No creo que esto elimine la opción de la lista desde la que la está moviendo. –

+0

@nemo Pruébalo y mira. Funciona bien. La función appendChild() elimina la opción de su padre actual y la mueve a la que está especificada; de lo contrario, estarías duplicando el nodo en el DOM. – Tom

+2

@nemo ¡No hay problema! En mi opinión, siempre es bueno saber * cómo * funciona algo en lugar de solo * que * funciona. – Tom

32

Si está contento de utilizar jQuery, es muy, muy simple.

$('#firstSelect option:selected').appendTo('#secondSelect'); 

Donde #firstSelect es el ID del cuadro de selección.

he incluido un ejemplo de trabajo aquí:

http://jsbin.com/aluzu (para editar: http://jsbin.com/aluzu/edit)

+0

Estoy usando javascript me podría proporcionar en javascript – balaweblog

+1

No debería usar remove() aquí. Eliminará cualquier controlador de eventos que pueda tener. $ ("# firstSelect option: selected"). appendTo ("# secondSelect") retendrá cualquier evento y tendrá exactamente el mismo efecto. – nickf

+1

@balaweblog: Eso es javascript – user9991

6

Una solución biblioteca independiente:

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="&gt;" onclick="Move(this)"/> 
    <input type="button" value="&gt;&gt;" onclick="Move(this)"/> 
    <input type="button" value="&lt;&lt;" onclick="Move(this)"/> 
    <input type="button" value="&lt;" onclick="Move(this)"/> 
</div> 

<select id="Right" multiple="multiple" size="10"> 
</select> 

CSS (ejemplo)

select { width: 200px; float: left; } 
#Toolbar { width: 50px; float: left; text-align: center; padding-top: 30px; } 
#Toolbar input { width: 40px; } 

prueba rápida y FF3 IE6 & 7 solamente.

+0

Esta solución no me funcionó en ASP.NET porque necesitaba los controles para manejar su propio ViewState (valores previamente seleccionados) entre las publicaciones, pero funcionó muy bien para la manipulación simple de HTML/Javascript de las listas de selección. –

Cuestiones relacionadas