[Javascript]Listbox的上下位置交換

[Javascript]Listbox的上下位置交換

我想很多人應該都寫過Listbox元件的操作,可能也都寫過Listbox item的上下移動功能,功能如下圖:

image

一個Listbox搭配兩個按鈕,一個向上一個向下,按下向上鈕可以將item往上移一位,案下向下鈕可以將item往下移一位,以下簡單實作一下這個功能:

先在網頁上拉一個Listbox跟兩個Imagebutton,並在兩個按鈕上註冊好Sort事件,一個傳入Up,一個傳Down:

            <asp:ListItem>台北市</asp:ListItem>
            <asp:ListItem>台北縣</asp:ListItem>
            <asp:ListItem>桃園市</asp:ListItem>
            <asp:ListItem>桃園縣</asp:ListItem>
            <asp:ListItem>新竹市</asp:ListItem>
            <asp:ListItem>新竹縣</asp:ListItem>
        </asp:ListBox>
        <asp:Image ID="Image1" runat="server" style="z-index: 100; left: 136px; position: absolute; top: 46px" 
            ImageUrl="~/BtnUp_H.gif" onclick="Sort('Up');return false;" />
        <asp:Image ID="Image2" runat="server" style="z-index: 100; left: 137px; position: absolute; top: 101px" 
            ImageUrl="~/BtnDown_H.gif" onclick="Sort('Down');return false;" />

接著加入要做item交換的js code,主要是透過Listbox的swapNode功能來達成。

        {
            var tSelectedIndex = tNowIndex;
            var tListOptions = tList.options;
            
            //先判斷要做swap的item存不存在
            if (tSelectedIndex + tIndex >= 0 && tListOptions[tSelectedIndex+tIndex] && tListOptions[tSelectedIndex])
            {             
                //進行swapNode
                tListOptions[tSelectedIndex + tIndex].swapNode(tListOptions[tSelectedIndex]);
            }
        }

        //進行listitem的排序
        function Sort(pAction)          
        {
            var tSortField = document.getElementById('ListBox1');    //排序欄位    
            var tSelectedIndex = tSortField.selectedIndex;
            
            //如果沒有選擇任何一個item
            if (tSelectedIndex == -1)
            {
                alert("請先選擇欲調整的顯示欄位!!");
            }
            else
            {
                for(var i = 0 ; i < tSortField.options.length ; i++)
                {
                  if (tSortField.options[i].selected == true)
                  {
                      if(pAction == 'Up')
                      {   
                          //上移
                            ListSwapNode(i,-1,tSortField);                           
                        }
                        else
                        {
                            //下移
                            ListSwapNode(i,+1,tSortField);                           
                        }
                        break;
                  }
              }
          }
        }

如此就簡單的完成了這個功能,不過我這個範例只能一次選擇一個item,如果要一次選擇多個,還需要再做一些調整囉。

游舒帆 (gipi)

探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。