Перемещение элементов в двойных списках

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

Я удаляю тег asp.net, поскольку он не имеет ничего общего с asp.net.

James McMahon 13.04.2009 21:38

@balaweblog: вы пытаетесь использовать элемент управления ASP.NET ListBox в качестве основы, в которую вы хотите перемещать элементы или из нее? Если это так, то тег ASP.NET действителен, и я добавлю его повторно и опубликую решение, которое поможет со стороны ASP.NET.

Chris Porter 21.09.2009 22:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
18
2
19 041
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

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

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

Я использую javascript, не могли бы вы предоставить мне JavaScript?

balaweblog 15.10.2008 13:37

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

nickf 15.10.2008 17:50

@balaweblog: это javascript

user9991 02.01.2009 22:26
Ответ принят как подходящий

В этом коде предполагается, что у вас есть привязка или она запускает движение при нажатии на нее:

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

 }

Я не думаю, что это уберет опцию из списка, из которого вы ее перемещаете.

James McMahon 13.04.2009 21:37

@nemo Попробуйте и убедитесь. Работает нормально. Функция appendChild () удаляет параметр из текущего родителя и перемещает его в указанный; в противном случае вы дублируете узел в DOM.

Tom 14.04.2009 17:01

@nemo Не проблема! На мой взгляд, всегда приятно знать, что как что-то работает, а не просто который работает.

Tom 15.04.2009 03:23

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

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.

Это решение не сработало для меня в ASP.NET, потому что мне нужны элементы управления для обработки их собственного ViewState (ранее выбранные значения) между сообщениями, но оно действительно хорошо работает для простых манипуляций HTML / Javascript со списками выбора.

Chris Porter 21.09.2009 23:59

Другие вопросы по теме