2008-10-15 7 views
18

Comment puis-je déplacer des éléments d'un contrôle de zone de liste vers un autre contrôle de zone de liste en utilisant JavaScript dans ASP.NET?Déplacement d'éléments dans deux listes de sélection

+0

Je supprime la balise asp.net, car cela n'a rien à voir avec asp.net. –

+1

@balaweblog: Est-ce que vous essayez d'utiliser le contrôle ASP.NET ListBox comme base pour déplacer des éléments? Si c'est le cas, la balise ASP.NET est valide et je vais la rajouter et publier une solution qui aidera sur le côté ASP.NET des choses. –

Répondre

6

Ce code suppose que vous avez une ancre ou qui déclenchera le mouvement quand il est cliqué:

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

Je ne pense pas que cela enlèverait l'option de la liste à partir de laquelle vous la déplacez. –

+0

@nemo Essayez-le et voyez. Ça fonctionne bien. La fonction appendChild() supprime l'option de son parent actuel et la déplace vers celle qui est spécifiée; sinon, vous dupliqueriez le noeud dans le DOM. – Tom

+2

@nemo Pas un problème! À mon avis, il est toujours bon de savoir * comment * quelque chose fonctionne au lieu de simplement * que * cela fonctionne. – Tom

32

Si vous êtes heureux d'utiliser jQuery, c'est très, très simple.

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

Où #firstSelect est l'ID de la zone de sélection.

J'ai inclus un exemple de travail ici:

http://jsbin.com/aluzu (pour modifier: http://jsbin.com/aluzu/edit)

+0

J'utilise javascript pourriez-vous s'il vous plaît me fournir en javascript – balaweblog

+1

Vous ne devriez pas utiliser remove() ici. Il va supprimer tous les gestionnaires d'événements que vous pourriez avoir. $ ("# firstSelect option: selected"). appendTo ("# secondSelect") conservera tous les événements, et aura exactement le même effet. – nickf

+1

@balaweblog: C'est javascript – user9991

6

Une solution de bibliothèque indépendante:

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 (exemple)

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

FF3 test rapide et IE6 & 7 uniquement.

+0

Cette solution ne fonctionnait pas pour moi dans ASP.NET parce que j'avais besoin des contrôles pour gérer leur propre ViewState (valeurs précédemment sélectionnées) entre les messages, mais cela fonctionnait très bien pour une simple manipulation HTML/Javascript des listes de sélection. –

Questions connexes