【问题标题】:Moving items in Dual Listboxes在双列表框中移动项目
【发布时间】:2010-09-17 06:38:42
【问题描述】:

如何在 ASP.NET 中使用 JavaScript 将项目从一个列表框控件移动到另一个列表框控件?

【问题讨论】:

  • 我正在删除 asp.net 标签,因为这确实与 asp.net 没有任何关系。
  • @balaweblog:您是否尝试使用 ASP.NET ListBox 控件作为您想要将项目移入/移出的基础?如果是这样,那么 ASP.NET 标记是有效的,我将重新添加它并发布一个有助于 ASP.NET 方面的解决方案。

标签: asp.net javascript listbox listbox-control


【解决方案1】:

如果你乐于使用 jQuery,它非常非常简单。

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

其中#firstSelect 是选择框的ID。

我在这里提供了一个工作示例:

http://jsbin.com/aluzu(编辑:http://jsbin.com/aluzu/edit

【讨论】:

  • 我正在使用 javascript,你能提供我的 javascript 吗
  • 你不应该在这里使用 remove() 。它将删除您可能拥有的任何事件处理程序。 $("#firstSelect option:selected").appendTo("#secondSelect") 将保留任何事件,并具有完全相同的效果。
  • @balaweblog: 那是javascript
【解决方案2】:

此代码假定您有一个锚点,或者当它被点击时会触发移动:

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

 }

【讨论】:

  • 我认为这不会从您要从中移动它的列表中删除该选项。
  • @nemo 试试看。它工作正常。 appendChild() 函数从它的当前父级中删除选项并将其移动到指定的选项;否则,您将在 DOM 中复制节点。
  • @nemo 没问题!在我看来,知道如何 某些东西是如何工作的,而不是仅仅知道 它是如何工作的,这总是很好的。
【解决方案3】:

独立于库的解决方案:

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 操作选择列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 2015-07-20
相关资源
最近更新 更多