2008-10-15 4 views
18

Как перенести элементы из одного элемента управления списком в другой элемент управления списком с помощью JavaScript в ASP.NET?Перемещение элементов в двойных списках

+0

Я удаляю тэг asp.net, так как это действительно не имеет никакого отношения к asp.net. – 2009-04-13 17:38:09

+1

@balaweblog: Вы пытаетесь использовать элемент управления ListBox ASP.NET в качестве базы, на которую вы хотите перемещать элементы в/из? Если это так, тег ASP.NET является допустимым, и я его повторно добавлю и опубликую решение, которое поможет на стороне ASP.NET. – 2009-09-21 18:31:47

ответ

6

Этот код предполагает, что у вас есть якорь или что вызовет к движению при щелчке:

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

} 
32

Если вы счастливы использовать jQuery, это очень, очень просто.

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

Адрес: #firstSelect - идентификатор поля выбора.

Я включил рабочий пример здесь:

http://jsbin.com/aluzu (для редактирования: http://jsbin.com/aluzu/edit)

+0

Я использую javascript, не могли бы вы предоставить мне javascript – balaweblog 2008-10-15 09:37:00

+1

Вы не должны использовать remove() здесь. Он удалит любые обработчики событий, которые у вас могут быть. $ ("# firstSelect option: selected"). appendTo ("# secondSelect") будет сохранять любые события и имеет тот же эффект. – nickf 2008-10-15 13:50:06

6

библиотека-независимое решение:

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 (пример)

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

Быстрый тест FF3 и IE6 & 7 только.

Смежные вопросы