向上/向下移动选项列表框JavaScript / ASP

时间:2011-08-22 04:35:30

标签: javascript asp.net

您好我正在尝试学习javascript而我正在弄乱这个example我发现:

function moveOptionUp(obj) {
if (!hasOptions(obj)) { return; }
    for (i = 0; i < obj.options.length; i++) {
       if (obj.options[i].selected) {
       if (i != 0 && !obj.options[i - 1].selected) {
           swapOptions(obj, i, i - 1);
           obj.options[i - 1].selected = true;
        }
     }
   }
}

我有一个列表框

<input type="button" value="Up" onclick="moveOptionUp(this.form['_lb2'])" />
<asp:ListBox ID="_lb2" name="_lb2" runat="server" Height="400px" Width="170px"/>

但是我无法让它工作......该示例使用了一个html选择框。我认为问题在于将控件作为参数传递。使用asp控件执行此操作的正确方法是什么。

哦BTW ..列表框项目是动态添加的

2 个答案:

答案 0 :(得分:2)

要将选项向上移动一个,请将其作为上一个选项的上一个同级插入(前提是它不是前一个选项):

function moveUp(sel) {
  var idx = sel.selectedIndex;
  var opt;

  // Only move up if not first
  if (idx > 0) {
    opt = sel.options[idx];
    sel.insertBefore(opt, sel.options[--idx]);
  }
}

更改测试以检查idx > 0,因为如果未选择任何选项, selectedIndex 将为-1。如果没有选择defalut选项并且表单被重置,则可能发生这种情况。

修改

示例HTML:

<form action="">
  <select id="_lb2" name="_lb2">
    <option>0
    <option>1
    <option>2
    <option>3
  </select>
  <input type="button" value="Move Up" onclick="
    moveUp(this.form['_lb2']);
  ">
</form>

答案 1 :(得分:1)

  

我认为问题在于将控件作为参数传递

...的确

更改

onclick="moveOptionUp(this.form['_lb2'])"

onclick="moveOptionUp(document.getElementById('_lb2'))"

btw,(您可能已经知道这一点)_lb2的ID不被视为valid