利用javascript设定listBox中各Item的上下顺序

来源:互联网 发布:淘宝上的cpu散片 编辑:程序博客网 时间:2024/06/06 23:16
  今天在重写后台管理中的排序操作方式的时候,写了一段运行在客户端的更改设定listBox控件中各个项(Item)的上下顺序的脚本程序,现整理一下儿希望对初学javascript的朋友们有所帮助,当然也请各位js老鸟们不要笑话。
  在帖出代码之前先说些要注意的地方吧:
  • 正常大家在使用此功能的时候其实纯粹的在客户端去调整listBox中Item的上下顺序是没有什么意义的(当然如果你用AJAX技术最终去保存那另当别论了),因为在用客户端的javascript调整的Item顺序,在您点击一个回发的按纽时顺序会回到页面最初加载的时候的状态,不光是Item的顺序,在用javascript动态的添加(删除)listBox中的Item,回发后也会保存不住更改状态的,这一点就是你用.net中自带的服务器端控件listBox也不行。(当然,dropDownList也是不行的),因此对于其更改状态的保存就要相对别的控件麻烦一点儿了。我平常在.net环境下的的处理方法是要用两个服务器端的TextBox(将其display:none)分别用分隔符的形式来顺序记录listBox中项的Text和Value,当然,什么时候去记录看需要了,你可以每次在客户端改变listBox的Item的时候就重新写一下两个TextBox的Value,也可以在保存时先在客户端重写一下儿两个TextBox的Value。客户端的javascript对于服务器端的TextBox改变其Value后,回发服务器时是可以保存住更改的Value的,这样子你就可以在服务器端通过读取两个TextBox的Text属性从面获取到用分隔符分隔的ListBox中的所有Item的Text和Value,这样子就解决了在服务器准确获得listBox状态的问题。当然,还有一个问题是回发结束后页面重新加载后ListBox又回到了页面打开时的状态,显示上存在着差别,这就需要在页面的末尾加入一段javascript的脚本,其要实现的功能是判断两个TextBox的Value如不为空的话首先清空listBox的所有Item,然后在利用split方法分隔两个TextBox的Value(一个是Text一个是Value),循环加入到listBox中就OK了,这样子在运行过程中就解决了所有问题,做到了ListBox或是dropDownList这类控件的状态准确保存了!
  • 鼠标点击后不放以使向上(向下)操作不间断的进行是需要合理运用setTimeout及clearTimeout两个方法实现的,具体可以参考代码。
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
  2. <html> 
  3. <head> 
  4. <title>排序</title> 
  5. <script> 
  6. var x=null
  7. var listObj=null
  8. //鼠标按下不放时的操作 
  9. function setTimeStart(type) 
  10. listObj=document.getElementById('forder'); 
  11. //超过0.3秒启动连续的向上(下)的操作 
  12. if(type=="up"
  13. x=setTimeout(upListItem,300); 
  14. }else 
  15. x=setTimeout(downListItem,300); 
  16. //将选中item向上 
  17. function upListItem() 
  18. var selIndex=listObj.selectedIndex; 
  19. if(selIndex<0) 
  20. if(x!=null){clearTimeout(x);} 
  21. return
  22. if(selIndex==0) 
  23. if(x!=null){clearTimeout(x);} 
  24. return
  25. var selValue=listObj.options[selIndex].value; 
  26. var selText=listObj.options[selIndex].text; 
  27. listObj.options[selIndex].value=listObj.options[selIndex-1].value; 
  28. listObj.options[selIndex].text=listObj.options[selIndex-1].text; 
  29. listObj.options[selIndex-1].value=selValue; 
  30. listObj.options[selIndex-1].text=selText; 
  31. listObj.selectedIndex=selIndex-1; 
  32. if(selIndex+1>0) 
  33. x=setTimeout(upListItem,200) 
  34. //将选中item向下 
  35. function downListItem() 
  36. var selIndex=listObj.selectedIndex; 
  37. if(selIndex<0) 
  38. if(x!=null){clearTimeout(x);} 
  39. return
  40. if(selIndex==listObj.options.length-1) 
  41. if(x!=null){clearTimeout(x);} 
  42. return
  43. var selValue=listObj.options[selIndex].value; 
  44. var selText=listObj.options[selIndex].text; 
  45. listObj.options[selIndex].value=listObj.options[selIndex+1].value; 
  46. listObj.options[selIndex].text=listObj.options[selIndex+1].text; 
  47. listObj.options[selIndex+1].value=selValue; 
  48. listObj.options[selIndex+1].text=selText; 
  49. listObj.selectedIndex=selIndex+1; 
  50. if(selIndex+1<listObj.options.length-1) 
  51. x=setTimeout(downListItem,200) 
  52. </script> 
  53. </head> 
  54. <body topMargin="20px" leftMargin="10px" rightMargin="0"
  55. <TABLE id="Table1" height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0"
  56. <TR> 
  57. <TD vAlign="top"
  58. <TABLE id="Table4" cellSpacing="0" cellPadding="0" width="100%" border="0"
  59. <TR> 
  60. <TD><INPUT class="upBtn" type="button" value="向上↑" onmousedown="setTimeStart('up');" onmouseup="clearTimeout(x);" 
  61. onclick="listObj=document.getElementById('forder');upListItem();clearTimeout(x);" ID="Button1" NAME="Button1"> <INPUT style="WIDTH: 48px; HEIGHT: 22px" type="button" value="↓向下" class="downBtn" onmousedown="setTimeStart('down');" 
  62. onmouseup="clearTimeout(x);" onclick="listObj=document.getElementById('forder');downListItem();clearTimeout(x);" ID="Button2" NAME="Button2">  
  63. </TD> 
  64. </TR> 
  65. <TR> 
  66. <TD> 
  67. <SELECT id="forder" style="WIDTH: 304px; HEIGHT: 240px" size="15"
  68. <OPTION value=1>1</OPTION> 
  69. <OPTION value=2>2</OPTION> 
  70. <OPTION value=3>3</OPTION> 
  71. <OPTION value=4>4</OPTION> 
  72. <OPTION value=5>5</OPTION> 
  73. <OPTION value=6>6</OPTION> 
  74. <OPTION value=7>7</OPTION> 
  75. <OPTION value=8>8</OPTION> 
  76. <OPTION value=9>9</OPTION> 
  77. </SELECT></TD> 
  78. </TR> 
  79. </TABLE> 
  80. </TD> 
  81. </TR> 
  82. </TABLE> 
  83. </body> 
  84. </html> 
原创粉丝点击